CQ. Split elements_test.dart into several files.

Change-Id: I060a58dc784a0dddbb15c3222e559ae930aef972
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/378542
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/test/src/summary/elements/augmentation_import_test.dart b/pkg/analyzer/test/src/summary/elements/augmentation_import_test.dart
new file mode 100644
index 0000000..11dec8e
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/augmentation_import_test.dart
@@ -0,0 +1,266 @@
+// Copyright (c) 2024, 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/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(LibraryAugmentationImportElementTest_keepLinking);
+    defineReflectiveTests(LibraryAugmentationImportElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class LibraryAugmentationImportElementTest extends ElementsBaseTest {
+  test_library_augmentationImports_augmentation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+class A {}
+''');
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class B {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @31
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class A @35
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
+''');
+
+    var import_0 = library.augmentationImports[0];
+    var augmentation = import_0.importedAugmentation!;
+    expect(augmentation.enclosingElement, same(library));
+  }
+
+  test_library_augmentationImports_depthFirst() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+''');
+
+    newFile('$testPackageLibPath/c.dart', r'''
+augment library 'test.dart';
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'c.dart';
+''');
+
+    configuration.withLibraryAugmentations = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentations
+    <testLibrary>::@augmentation::package:test/a.dart
+    <testLibrary>::@augmentation::package:test/b.dart
+    <testLibrary>::@augmentation::package:test/c.dart
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+    package:test/c.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/c.dart
+      definingUnit: <testLibrary>::@fragment::package:test/c.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+    <testLibrary>::@fragment::package:test/c.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/c.dart
+      enclosingElement3: <testLibraryFragment>
+''');
+
+    var import_0 = library.augmentationImports[0];
+    var augmentation = import_0.importedAugmentation!;
+    expect(augmentation.enclosingElement, same(library));
+  }
+
+  test_library_augmentationImports_noRelativeUriStr() async {
+    var library = await buildLibrary(r'''
+import augment '${'foo'}.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    noRelativeUriString
+      enclosingElement: <testLibrary>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+
+  test_library_augmentationImports_withRelativeUri_emptyUriSelf() async {
+    var library = await buildLibrary(r'''
+import augment '';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    source 'package:test/test.dart'
+      enclosingElement: <testLibrary>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+
+  test_library_augmentationImports_withRelativeUri_noSource() async {
+    var library = await buildLibrary(r'''
+import augment 'foo:bar';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    relativeUri 'foo:bar'
+      enclosingElement: <testLibrary>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+
+  test_library_augmentationImports_withRelativeUri_notAugmentation_library() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+library my.lib;
+''');
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    source 'package:test/a.dart'
+      enclosingElement: <testLibrary>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+
+  test_library_augmentationImports_withRelativeUri_notAugmentation_part() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+part of other.lib;
+''');
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    source 'package:test/a.dart'
+      enclosingElement: <testLibrary>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+
+  test_library_augmentationImports_withRelativeUri_notExists() async {
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    source 'package:test/a.dart'
+      enclosingElement: <testLibrary>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+
+  test_library_augmentationImports_withRelativeUriString() async {
+    var library = await buildLibrary(r'''
+import augment ':';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    relativeUriString ':'
+      enclosingElement: <testLibrary>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+}
+
+@reflectiveTest
+class LibraryAugmentationImportElementTest_fromBytes
+    extends LibraryAugmentationImportElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class LibraryAugmentationImportElementTest_keepLinking
+    extends LibraryAugmentationImportElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/class_test.dart b/pkg/analyzer/test/src/summary/elements/class_test.dart
new file mode 100644
index 0000000..5b2eda1
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/class_test.dart
@@ -0,0 +1,20980 @@
+// Copyright (c) 2024, 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/element.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../element_text.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ClassElementTest_keepLinking);
+    defineReflectiveTests(ClassElementTest_fromBytes);
+    defineReflectiveTests(ClassElementTest_augmentation_keepLinking);
+    defineReflectiveTests(ClassElementTest_augmentation_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class ClassElementTest extends ElementsBaseTest {
+  test_class_abstract() async {
+    var library = await buildLibrary('abstract class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class C @15
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_base() async {
+    var library = await buildLibrary('base class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        base class C @11
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_constructor_const() async {
+    var library = await buildLibrary('class C { const C(); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @16
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_constructor_const_external() async {
+    var library = await buildLibrary('class C { external const C(); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            external const @25
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_constructor_documented() async {
+    var library = await buildLibrary('''
+class C {
+  /**
+   * Docs
+   */
+  C();
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @34
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /**\n   * Docs\n   */
+''');
+  }
+
+  test_class_constructor_explicit_named() async {
+    var library = await buildLibrary('class C { C.foo(); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            foo @12
+              reference: <testLibraryFragment>::@class::C::@constructor::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 11
+              nameEnd: 15
+''');
+  }
+
+  test_class_constructor_explicit_type_params() async {
+    var library = await buildLibrary('class C<T, U> { C(); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          constructors
+            @16
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_constructor_explicit_unnamed() async {
+    var library = await buildLibrary('class C { C(); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @10
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_constructor_external() async {
+    var library = await buildLibrary('class C { external C(); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            external @19
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_constructor_factory() async {
+    var library = await buildLibrary('class C { factory C() => throw 0; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            factory @18
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_constructor_field_formal_dynamic_dynamic() async {
+    var library =
+        await buildLibrary('class C { dynamic x; C(dynamic this.x); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @21
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @36
+                  type: dynamic
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_dynamic_typed() async {
+    var library = await buildLibrary('class C { dynamic x; C(int this.x); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @21
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @32
+                  type: int
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_dynamic_untyped() async {
+    var library = await buildLibrary('class C { dynamic x; C(this.x); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @21
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @28
+                  type: dynamic
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_functionTyped_noReturnType() async {
+    var library = await buildLibrary(r'''
+class C {
+  var x;
+  C(this.x(double b));
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @16
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @21
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @28
+                  type: dynamic Function(double)
+                  parameters
+                    requiredPositional b @37
+                      type: double
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_functionTyped_withReturnType() async {
+    var library = await buildLibrary(r'''
+class C {
+  var x;
+  C(int this.x(double b));
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @16
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @21
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @32
+                  type: int Function(double)
+                  parameters
+                    requiredPositional b @41
+                      type: double
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_functionTyped_withReturnType_generic() async {
+    var library = await buildLibrary(r'''
+class C {
+  Function() f;
+  C(List<U> this.f<T, U>(T t));
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            f @23
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic Function()
+          constructors
+            @28
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.f @43
+                  type: List<U> Function<T, U>(T)
+                  typeParameters
+                    covariant T @45
+                    covariant U @48
+                  parameters
+                    requiredPositional t @53
+                      type: T
+                  field: <testLibraryFragment>::@class::C::@field::f
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic Function()
+            synthetic set f= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _f @-1
+                  type: dynamic Function()
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_multiple_matching_fields() async {
+    // This is a compile-time error but it should still analyze consistently.
+    var library = await buildLibrary('class C { C(this.x); int x; String x; }');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @25
+              reference: <testLibraryFragment>::@class::C::@field::x::@def::0
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+            x @35
+              reference: <testLibraryFragment>::@class::C::@field::x::@def::1
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: String
+          constructors
+            @10
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @17
+                  type: int
+                  field: <testLibraryFragment>::@class::C::@field::x::@def::0
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x::@def::0
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x::@def::0
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: int
+              returnType: void
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x::@def::1
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: String
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x::@def::1
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: String
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_no_matching_field() async {
+    // This is a compile-time error but it should still analyze consistently.
+    var library = await buildLibrary('class C { C(this.x); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @10
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @17
+                  type: dynamic
+                  field: <null>
+''');
+  }
+
+  test_class_constructor_field_formal_typed_dynamic() async {
+    var library = await buildLibrary('class C { num x; C(dynamic this.x); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: num
+          constructors
+            @17
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @32
+                  type: dynamic
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: num
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: num
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_typed_typed() async {
+    var library = await buildLibrary('class C { num x; C(int this.x); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: num
+          constructors
+            @17
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @28
+                  type: int
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: num
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: num
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_typed_untyped() async {
+    var library = await buildLibrary('class C { num x; C(this.x); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: num
+          constructors
+            @17
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @24
+                  type: num
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: num
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: num
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_untyped_dynamic() async {
+    var library = await buildLibrary('class C { var x; C(dynamic this.x); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @17
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @32
+                  type: dynamic
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_untyped_typed() async {
+    var library = await buildLibrary('class C { var x; C(int this.x); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @17
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @28
+                  type: int
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_constructor_field_formal_untyped_untyped() async {
+    var library = await buildLibrary('class C { var x; C(this.x); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @17
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @24
+                  type: dynamic
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_constructor_fieldFormal_named_noDefault() async {
+    var library = await buildLibrary('class C { int x; C({this.x}); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            @17
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalNamed default final this.x @25
+                  reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
+                  type: int
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_constructor_fieldFormal_named_withDefault() async {
+    var library = await buildLibrary('class C { int x; C({this.x: 42}); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            @17
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalNamed default final this.x @25
+                  reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 42 @28
+                      staticType: int
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_constructor_fieldFormal_optional_noDefault() async {
+    var library = await buildLibrary('class C { int x; C([this.x]); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            @17
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default final this.x @25
+                  type: int
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_constructor_fieldFormal_optional_withDefault() async {
+    var library = await buildLibrary('class C { int x; C([this.x = 42]); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            @17
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default final this.x @25
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 42 @29
+                      staticType: int
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_constructor_implicit_type_params() async {
+    var library = await buildLibrary('class C<T, U> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_constructor_initializers_assertInvocation() async {
+    var library = await buildLibrary('''
+class C {
+  const C(int x) : assert(x >= 42);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional x @24
+                  type: int
+              constantInitializers
+                AssertInitializer
+                  assertKeyword: assert @29
+                  leftParenthesis: ( @35
+                  condition: BinaryExpression
+                    leftOperand: SimpleIdentifier
+                      token: x @36
+                      staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
+                      staticType: int
+                    operator: >= @38
+                    rightOperand: IntegerLiteral
+                      literal: 42 @41
+                      staticType: int
+                    staticElement: dart:core::<fragment>::@class::num::@method::>=
+                    staticInvokeType: bool Function(num)
+                    staticType: bool
+                  rightParenthesis: ) @43
+''');
+  }
+
+  test_class_constructor_initializers_assertInvocation_message() async {
+    var library = await buildLibrary('''
+class C {
+  const C(int x) : assert(x >= 42, 'foo');
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional x @24
+                  type: int
+              constantInitializers
+                AssertInitializer
+                  assertKeyword: assert @29
+                  leftParenthesis: ( @35
+                  condition: BinaryExpression
+                    leftOperand: SimpleIdentifier
+                      token: x @36
+                      staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
+                      staticType: int
+                    operator: >= @38
+                    rightOperand: IntegerLiteral
+                      literal: 42 @41
+                      staticType: int
+                    staticElement: dart:core::<fragment>::@class::num::@method::>=
+                    staticInvokeType: bool Function(num)
+                    staticType: bool
+                  comma: , @43
+                  message: SimpleStringLiteral
+                    literal: 'foo' @45
+                  rightParenthesis: ) @50
+''');
+  }
+
+  test_class_constructor_initializers_field() async {
+    var library = await buildLibrary('''
+class C {
+  final x;
+  const C() : x = 42;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            const @29
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: x @35
+                    staticElement: <testLibraryFragment>::@class::C::@field::x
+                    staticType: null
+                  equals: = @37
+                  expression: IntegerLiteral
+                    literal: 42 @39
+                    staticType: int
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_class_constructor_initializers_field_notConst() async {
+    var library = await buildLibrary('''
+class C {
+  final x;
+  const C() : x = foo();
+}
+int foo() => 42;
+''');
+    // It is OK to keep non-constant initializers.
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            const @29
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: x @35
+                    staticElement: <testLibraryFragment>::@class::C::@field::x
+                    staticType: null
+                  equals: = @37
+                  expression: MethodInvocation
+                    methodName: SimpleIdentifier
+                      token: foo @39
+                      staticElement: <testLibraryFragment>::@function::foo
+                      staticType: int Function()
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @42
+                      rightParenthesis: ) @43
+                    staticInvokeType: int Function()
+                    staticType: int
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+      functions
+        foo @52
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_class_constructor_initializers_field_optionalPositionalParameter() async {
+    var library = await buildLibrary('''
+class A {
+  final int _f;
+  const A([int f = 0]) : _f = f;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _f @22
+              reference: <testLibraryFragment>::@class::A::@field::_f
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            const @34
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                optionalPositional default f @41
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 0 @45
+                      staticType: int
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: _f @51
+                    staticElement: <testLibraryFragment>::@class::A::@field::_f
+                    staticType: null
+                  equals: = @54
+                  expression: SimpleIdentifier
+                    token: f @56
+                    staticElement: <testLibraryFragment>::@class::A::@constructor::new::@parameter::f
+                    staticType: int
+          accessors
+            synthetic get _f @-1
+              reference: <testLibraryFragment>::@class::A::@getter::_f
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+''');
+  }
+
+  test_class_constructor_initializers_field_recordLiteral() async {
+    var library = await buildLibrary('''
+class C {
+  final Object x;
+  const C(int a) : x = (0, a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @25
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: Object
+          constructors
+            const @36
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional a @42
+                  type: int
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: x @47
+                    staticElement: <testLibraryFragment>::@class::C::@field::x
+                    staticType: null
+                  equals: = @49
+                  expression: RecordLiteral
+                    leftParenthesis: ( @51
+                    fields
+                      IntegerLiteral
+                        literal: 0 @52
+                        staticType: int
+                      SimpleIdentifier
+                        token: a @55
+                        staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::a
+                        staticType: int
+                    rightParenthesis: ) @56
+                    staticType: (int, int)
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: Object
+''');
+  }
+
+  test_class_constructor_initializers_field_withParameter() async {
+    var library = await buildLibrary('''
+class C {
+  final x;
+  const C(int p) : x = 1 + p;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            const @29
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional p @35
+                  type: int
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: x @40
+                    staticElement: <testLibraryFragment>::@class::C::@field::x
+                    staticType: null
+                  equals: = @42
+                  expression: BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @44
+                      staticType: int
+                    operator: + @46
+                    rightOperand: SimpleIdentifier
+                      token: p @48
+                      staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::p
+                      staticType: int
+                    staticElement: dart:core::<fragment>::@class::num::@method::+
+                    staticInvokeType: num Function(num)
+                    staticType: int
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_class_constructor_initializers_genericFunctionType() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A();
+}
+class B {
+  const B(dynamic x);
+  const B.f()
+   : this(A<Function()>());
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @34
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @46
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional x @56
+                  type: dynamic
+            const f @70
+              reference: <testLibraryFragment>::@class::B::@constructor::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              periodOffset: 69
+              nameEnd: 71
+              constantInitializers
+                RedirectingConstructorInvocation
+                  thisKeyword: this @79
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @83
+                    arguments
+                      InstanceCreationExpression
+                        constructorName: ConstructorName
+                          type: NamedType
+                            name: A @84
+                            typeArguments: TypeArgumentList
+                              leftBracket: < @85
+                              arguments
+                                GenericFunctionType
+                                  functionKeyword: Function @86
+                                  parameters: FormalParameterList
+                                    leftParenthesis: ( @94
+                                    rightParenthesis: ) @95
+                                  declaredElement: GenericFunctionTypeElement
+                                    parameters
+                                    returnType: dynamic
+                                    type: dynamic Function()
+                                  type: dynamic Function()
+                              rightBracket: > @96
+                            element: <testLibraryFragment>::@class::A
+                            type: A<dynamic Function()>
+                          staticElement: ConstructorMember
+                            base: <testLibraryFragment>::@class::A::@constructor::new
+                            substitution: {T: dynamic Function()}
+                        argumentList: ArgumentList
+                          leftParenthesis: ( @97
+                          rightParenthesis: ) @98
+                        staticType: A<dynamic Function()>
+                    rightParenthesis: ) @99
+                  staticElement: <testLibraryFragment>::@class::B::@constructor::new
+              redirectedConstructor: <testLibraryFragment>::@class::B::@constructor::new
+''');
+  }
+
+  test_class_constructor_initializers_superInvocation_argumentContextType() async {
+    var library = await buildLibrary('''
+class A {
+  const A(List<String> values);
+}
+class B extends A {
+  const B() : super(const []);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional values @33
+                  type: List<String>
+        class B @50
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            const @72
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @78
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @83
+                    arguments
+                      ListLiteral
+                        constKeyword: const @84
+                        leftBracket: [ @90
+                        rightBracket: ] @91
+                        staticType: List<String>
+                    rightParenthesis: ) @92
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_initializers_superInvocation_named() async {
+    var library = await buildLibrary('''
+class A {
+  const A.aaa(int p);
+}
+class C extends A {
+  const C() : super.aaa(42);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const aaa @20
+              reference: <testLibraryFragment>::@class::A::@constructor::aaa
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 19
+              nameEnd: 23
+              parameters
+                requiredPositional p @28
+                  type: int
+        class C @40
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            const @62
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @68
+                  period: . @73
+                  constructorName: SimpleIdentifier
+                    token: aaa @74
+                    staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @77
+                    arguments
+                      IntegerLiteral
+                        literal: 42 @78
+                        staticType: int
+                    rightParenthesis: ) @80
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::aaa
+''');
+  }
+
+  test_class_constructor_initializers_superInvocation_named_underscore() async {
+    var library = await buildLibrary('''
+class A {
+  const A._();
+}
+class B extends A {
+  const B() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const _ @20
+              reference: <testLibraryFragment>::@class::A::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 19
+              nameEnd: 21
+        class B @33
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            const @55
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @61
+                  period: . @66
+                  constructorName: SimpleIdentifier
+                    token: _ @67
+                    staticElement: <testLibraryFragment>::@class::A::@constructor::_
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @68
+                    rightParenthesis: ) @69
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::_
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::_
+''');
+  }
+
+  test_class_constructor_initializers_superInvocation_namedExpression() async {
+    var library = await buildLibrary('''
+class A {
+  const A.aaa(a, {int b});
+}
+class C extends A {
+  const C() : super.aaa(1, b: 2);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const aaa @20
+              reference: <testLibraryFragment>::@class::A::@constructor::aaa
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 19
+              nameEnd: 23
+              parameters
+                requiredPositional a @24
+                  type: dynamic
+                optionalNamed default b @32
+                  reference: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b
+                  type: int
+        class C @45
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            const @67
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @73
+                  period: . @78
+                  constructorName: SimpleIdentifier
+                    token: aaa @79
+                    staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @82
+                    arguments
+                      IntegerLiteral
+                        literal: 1 @83
+                        staticType: int
+                      NamedExpression
+                        name: Label
+                          label: SimpleIdentifier
+                            token: b @86
+                            staticElement: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b
+                            staticType: null
+                          colon: : @87
+                        expression: IntegerLiteral
+                          literal: 2 @89
+                          staticType: int
+                    rightParenthesis: ) @90
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::aaa
+''');
+  }
+
+  test_class_constructor_initializers_superInvocation_unnamed() async {
+    var library = await buildLibrary('''
+class A {
+  const A(int p);
+}
+class C extends A {
+  const C.ccc() : super(42);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional p @24
+                  type: int
+        class C @36
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            const ccc @60
+              reference: <testLibraryFragment>::@class::C::@constructor::ccc
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 59
+              nameEnd: 63
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @68
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @73
+                    arguments
+                      IntegerLiteral
+                        literal: 42 @74
+                        staticType: int
+                    rightParenthesis: ) @76
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_initializers_thisInvocation_argumentContextType() async {
+    var library = await buildLibrary('''
+class A {
+  const A(List<String> values);
+  const A.empty() : this(const []);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional values @33
+                  type: List<String>
+            const empty @52
+              reference: <testLibraryFragment>::@class::A::@constructor::empty
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 51
+              nameEnd: 57
+              constantInitializers
+                RedirectingConstructorInvocation
+                  thisKeyword: this @62
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @66
+                    arguments
+                      ListLiteral
+                        constKeyword: const @67
+                        leftBracket: [ @73
+                        rightBracket: ] @74
+                        staticType: List<String>
+                    rightParenthesis: ) @75
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              redirectedConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_initializers_thisInvocation_named() async {
+    var library = await buildLibrary('''
+class C {
+  const C() : this.named(1, 'bbb');
+  const C.named(int a, String b);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                RedirectingConstructorInvocation
+                  thisKeyword: this @24
+                  period: . @28
+                  constructorName: SimpleIdentifier
+                    token: named @29
+                    staticElement: <testLibraryFragment>::@class::C::@constructor::named
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @34
+                    arguments
+                      IntegerLiteral
+                        literal: 1 @35
+                        staticType: int
+                      SimpleStringLiteral
+                        literal: 'bbb' @38
+                    rightParenthesis: ) @43
+                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
+              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
+            const named @56
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 55
+              nameEnd: 61
+              parameters
+                requiredPositional a @66
+                  type: int
+                requiredPositional b @76
+                  type: String
+''');
+  }
+
+  test_class_constructor_initializers_thisInvocation_namedExpression() async {
+    var library = await buildLibrary('''
+class C {
+  const C() : this.named(1, b: 2);
+  const C.named(a, {int b});
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                RedirectingConstructorInvocation
+                  thisKeyword: this @24
+                  period: . @28
+                  constructorName: SimpleIdentifier
+                    token: named @29
+                    staticElement: <testLibraryFragment>::@class::C::@constructor::named
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @34
+                    arguments
+                      IntegerLiteral
+                        literal: 1 @35
+                        staticType: int
+                      NamedExpression
+                        name: Label
+                          label: SimpleIdentifier
+                            token: b @38
+                            staticElement: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b
+                            staticType: null
+                          colon: : @39
+                        expression: IntegerLiteral
+                          literal: 2 @41
+                          staticType: int
+                    rightParenthesis: ) @42
+                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
+              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
+            const named @55
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 54
+              nameEnd: 60
+              parameters
+                requiredPositional a @61
+                  type: dynamic
+                optionalNamed default b @69
+                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b
+                  type: int
+''');
+  }
+
+  test_class_constructor_initializers_thisInvocation_unnamed() async {
+    var library = await buildLibrary('''
+class C {
+  const C.named() : this(1, 'bbb');
+  const C(int a, String b);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const named @20
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 19
+              nameEnd: 25
+              constantInitializers
+                RedirectingConstructorInvocation
+                  thisKeyword: this @30
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @34
+                    arguments
+                      IntegerLiteral
+                        literal: 1 @35
+                        staticType: int
+                      SimpleStringLiteral
+                        literal: 'bbb' @38
+                    rightParenthesis: ) @43
+                  staticElement: <testLibraryFragment>::@class::C::@constructor::new
+              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
+            const @54
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional a @60
+                  type: int
+                requiredPositional b @70
+                  type: String
+''');
+  }
+
+  test_class_constructor_parameters_super_explicitType_function() async {
+    var library = await buildLibrary('''
+class A {
+  A(Object? a);
+}
+
+class B extends A {
+  B(int super.a<T extends num>(T d)?);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @22
+                  type: Object?
+        class B @35
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @51
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional final super.a @63
+                  type: int Function<T extends num>(T)?
+                  typeParameters
+                    covariant T @65
+                      bound: num
+                  parameters
+                    requiredPositional d @82
+                      type: T
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_explicitType_interface() async {
+    var library = await buildLibrary('''
+class A {
+  A(num a);
+}
+
+class B extends A {
+  B(int super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @18
+                  type: num
+        class B @31
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @47
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional final super.a @59
+                  type: int
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_explicitType_interface_nullable() async {
+    var library = await buildLibrary('''
+class A {
+  A(num? a);
+}
+
+class B extends A {
+  B(int? super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @19
+                  type: num?
+        class B @32
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @48
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional final super.a @61
+                  type: int?
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_invalid_topFunction() async {
+    var library = await buildLibrary('''
+void f(super.a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional final super.a @13
+              type: dynamic
+              superConstructorParameter: <null>
+          returnType: void
+''');
+  }
+
+  test_class_constructor_parameters_super_optionalNamed() async {
+    var library = await buildLibrary('''
+class A {
+  A({required int a, required double b});
+}
+
+class B extends A {
+  B({String o1, super.a, String o2, super.b}) : super();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredNamed default a @28
+                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+                  type: int
+                requiredNamed default b @47
+                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
+                  type: double
+        class B @61
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @77
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                optionalNamed default o1 @87
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1
+                  type: String
+                optionalNamed default final super.a @97
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
+                  type: int
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+                optionalNamed default o2 @107
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2
+                  type: String
+                optionalNamed default final super.b @117
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
+                  type: double
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_optionalNamed_defaultValue() async {
+    var library = await buildLibrary('''
+class A {
+  A({int a = 0});
+}
+
+class B extends A {
+  B({super.a});
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                optionalNamed default a @19
+                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 0 @23
+                      staticType: int
+        class B @37
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @53
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                optionalNamed default final hasDefaultValue super.a @62
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
+                  type: int
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_optionalNamed_unresolved() async {
+    var library = await buildLibrary('''
+class A {
+  A({required int a});
+}
+
+class B extends A {
+  B({super.b});
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredNamed default a @28
+                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+                  type: int
+        class B @42
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @58
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                optionalNamed default final super.b @67
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
+                  type: dynamic
+                  superConstructorParameter: <null>
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_optionalNamed_unresolved2() async {
+    var library = await buildLibrary('''
+class A {
+  A(int a);
+}
+
+class B extends A {
+  B({super.a});
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @18
+                  type: int
+        class B @31
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @47
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                optionalNamed default final super.a @56
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
+                  type: dynamic
+                  superConstructorParameter: <null>
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_optionalPositional() async {
+    var library = await buildLibrary('''
+class A {
+  A(int a, double b);
+}
+
+class B extends A {
+  B([String o1, super.a, String o2, super.b]) : super();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @18
+                  type: int
+                requiredPositional b @28
+                  type: double
+        class B @41
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @57
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                optionalPositional default o1 @67
+                  type: String
+                optionalPositional default final super.a @77
+                  type: int
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+                optionalPositional default o2 @87
+                  type: String
+                optionalPositional default final super.b @97
+                  type: double
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredNamed() async {
+    var library = await buildLibrary('''
+class A {
+  A({required int a, required double b});
+}
+
+class B extends A {
+  B({
+    required String o1,
+    required super.a,
+    required String o2,
+    required super.b,
+  }) : super();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredNamed default a @28
+                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+                  type: int
+                requiredNamed default b @47
+                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
+                  type: double
+        class B @61
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @77
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredNamed default o1 @101
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1
+                  type: String
+                requiredNamed default final super.a @124
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
+                  type: int
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+                requiredNamed default o2 @147
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2
+                  type: String
+                requiredNamed default final super.b @170
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
+                  type: double
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredNamed_defaultValue() async {
+    var library = await buildLibrary('''
+class A {
+  A({int a = 0});
+}
+
+class B extends A {
+  B({required super.a});
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                optionalNamed default a @19
+                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 0 @23
+                      staticType: int
+        class B @37
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @53
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredNamed default final super.a @71
+                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
+                  type: int
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredPositional() async {
+    var library = await buildLibrary('''
+class A {
+  A(int a, double b);
+}
+
+class B extends A {
+  B(String o1, super.a, String o2, super.b) : super();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @18
+                  type: int
+                requiredPositional b @28
+                  type: double
+        class B @41
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @57
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional o1 @66
+                  type: String
+                requiredPositional final super.a @76
+                  type: int
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+                requiredPositional o2 @86
+                  type: String
+                requiredPositional final super.b @96
+                  type: double
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredPositional_inferenceOrder() async {
+    // It is important that `B` is declared after `C`, so that we check that
+    // inference happens in order - first `B`, then `C`.
+    var library = await buildLibrary('''
+abstract class A {
+  A(int a);
+}
+
+class C extends B {
+  C(super.a);
+}
+
+class B extends A {
+  B(super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class A @15
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @27
+                  type: int
+        class C @40
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: B
+          constructors
+            @56
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final super.a @64
+                  type: int
+                  superConstructorParameter: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
+              superConstructor: <testLibraryFragment>::@class::B::@constructor::new
+        class B @77
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @93
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional final super.a @101
+                  type: int
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredPositional_inferenceOrder_generic() async {
+    // It is important that `C` is declared before `B`, so that we check that
+    // inference happens in order - first `B`, then `C`.
+    var library = await buildLibrary('''
+class A {
+  A(int a);
+}
+
+class C extends B<String> {
+  C(super.a);
+}
+
+class B<T> extends A {
+  B(super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @18
+                  type: int
+        class C @31
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: B<String>
+          constructors
+            @55
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final super.a @63
+                  type: int
+                  superConstructorParameter: SuperFormalParameterMember
+                    base: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
+                    substitution: {T: String}
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::B::@constructor::new
+                substitution: {T: String}
+        class B @76
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @78
+              defaultType: dynamic
+          supertype: A
+          constructors
+            @95
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional final super.a @103
+                  type: int
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredPositional_unresolved() async {
+    var library = await buildLibrary('''
+class A {}
+
+class B extends A {
+  B(super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @18
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @34
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional final super.a @42
+                  type: dynamic
+                  superConstructorParameter: <null>
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_parameters_super_requiredPositional_unresolved2() async {
+    var library = await buildLibrary('''
+class A {
+  A({required int a})
+}
+
+class B extends A {
+  B(super.a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredNamed default a @28
+                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
+                  type: int
+        class B @41
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @57
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional final super.a @65
+                  type: dynamic
+                  superConstructorParameter: <null>
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_params() async {
+    var library = await buildLibrary('class C { C(x, int y); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @10
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional x @12
+                  type: dynamic
+                requiredPositional y @19
+                  type: int
+''');
+  }
+
+  test_class_constructor_redirected_factory_named() async {
+    var library = await buildLibrary('''
+class C {
+  factory C() = D.named;
+  C._();
+}
+class D extends C {
+  D.named() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            factory @20
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::named
+            _ @39
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 38
+              nameEnd: 40
+        class D @52
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          supertype: C
+          constructors
+            named @70
+              reference: <testLibraryFragment>::@class::D::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::D
+              periodOffset: 69
+              nameEnd: 75
+              superConstructor: <testLibraryFragment>::@class::C::@constructor::_
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_generic() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  factory C() = D<U, T>.named;
+  C._();
+}
+class D<T, U> extends C<U, T> {
+  D.named() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          constructors
+            factory @26
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::D::@constructor::named
+                substitution: {T: U, U: T}
+            _ @51
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 50
+              nameEnd: 52
+        class D @64
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @66
+              defaultType: dynamic
+            covariant U @69
+              defaultType: dynamic
+          supertype: C<U, T>
+          constructors
+            named @94
+              reference: <testLibraryFragment>::@class::D::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::D
+              periodOffset: 93
+              nameEnd: 99
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::C::@constructor::_
+                substitution: {T: U, U: T}
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_generic_viaTypeAlias() async {
+    var library = await buildLibrary('''
+typedef A<T, U> = C<T, U>;
+class B<T, U> {
+  factory B() = A<U, T>.named;
+  B._();
+}
+class C<T, U> extends A<U, T> {
+  C.named() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @33
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @35
+              defaultType: dynamic
+            covariant U @38
+              defaultType: dynamic
+          constructors
+            factory @53
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              redirectedConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::C::@constructor::named
+                substitution: {T: U, U: T}
+            _ @78
+              reference: <testLibraryFragment>::@class::B::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::B
+              periodOffset: 77
+              nameEnd: 79
+        class C @91
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @93
+              defaultType: dynamic
+            covariant U @96
+              defaultType: dynamic
+          supertype: C<U, T>
+            alias: <testLibraryFragment>::@typeAlias::A
+              typeArguments
+                U
+                T
+          constructors
+            named @121
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 120
+              nameEnd: 126
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+            covariant U @13
+              defaultType: dynamic
+          aliasedType: C<T, U>
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_imported() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D extends C {
+  D.named() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart';
+class C {
+  factory C() = D.named;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @25
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            factory @39
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named
+            _ @58
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 57
+              nameEnd: 59
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_imported_generic() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D<T, U> extends C<U, T> {
+  D.named() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart';
+class C<T, U> {
+  factory C() = D<U, T>.named;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @25
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @27
+              defaultType: dynamic
+            covariant U @30
+              defaultType: dynamic
+          constructors
+            factory @45
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: ConstructorMember
+                base: package:test/foo.dart::<fragment>::@class::D::@constructor::named
+                substitution: {T: U, U: T}
+            _ @70
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 69
+              nameEnd: 71
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_prefixed() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D extends C {
+  D.named() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+class C {
+  factory C() = foo.D.named;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @32
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            factory @46
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named
+            _ @69
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 68
+              nameEnd: 70
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_prefixed_generic() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D<T, U> extends C<U, T> {
+  D.named() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+class C<T, U> {
+  factory C() = foo.D<U, T>.named;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @32
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @34
+              defaultType: dynamic
+            covariant U @37
+              defaultType: dynamic
+          constructors
+            factory @52
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: ConstructorMember
+                base: package:test/foo.dart::<fragment>::@class::D::@constructor::named
+                substitution: {T: U, U: T}
+            _ @81
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 80
+              nameEnd: 82
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_unresolved_class() async {
+    var library = await buildLibrary('''
+class C<E> {
+  factory C() = D.named<E>;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant E @8
+              defaultType: dynamic
+          constructors
+            factory @23
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_constructor_redirected_factory_named_unresolved_constructor() async {
+    var library = await buildLibrary('''
+class D {}
+class C<E> {
+  factory C() = D.named<E>;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class D @6
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class C @17
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant E @19
+              defaultType: dynamic
+          constructors
+            factory @34
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed() async {
+    var library = await buildLibrary('''
+class C {
+  factory C() = D;
+  C._();
+}
+class D extends C {
+  D() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            factory @20
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::new
+            _ @33
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 32
+              nameEnd: 34
+        class D @46
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          supertype: C
+          constructors
+            @62
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+              superConstructor: <testLibraryFragment>::@class::C::@constructor::_
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_generic() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  factory C() = D<U, T>;
+  C._();
+}
+class D<T, U> extends C<U, T> {
+  D() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          constructors
+            factory @26
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::D::@constructor::new
+                substitution: {T: U, U: T}
+            _ @45
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 44
+              nameEnd: 46
+        class D @58
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @60
+              defaultType: dynamic
+            covariant U @63
+              defaultType: dynamic
+          supertype: C<U, T>
+          constructors
+            @86
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::C::@constructor::_
+                substitution: {T: U, U: T}
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_generic_viaTypeAlias() async {
+    var library = await buildLibrary('''
+typedef A<T, U> = C<T, U>;
+class B<T, U> {
+  factory B() = A<U, T>;
+  B_();
+}
+class C<T, U> extends B<U, T> {
+  C() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @33
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @35
+              defaultType: dynamic
+            covariant U @38
+              defaultType: dynamic
+          constructors
+            factory @53
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              redirectedConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::C::@constructor::new
+                substitution: {T: U, U: T}
+          methods
+            abstract B_ @70
+              reference: <testLibraryFragment>::@class::B::@method::B_
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: dynamic
+        class C @84
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @86
+              defaultType: dynamic
+            covariant U @89
+              defaultType: dynamic
+          supertype: B<U, T>
+          constructors
+            @112
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+            covariant U @13
+              defaultType: dynamic
+          aliasedType: C<T, U>
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_imported() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D extends C {
+  D() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart';
+class C {
+  factory C() = D;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @25
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            factory @39
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new
+            _ @52
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 51
+              nameEnd: 53
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_imported_generic() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D<T, U> extends C<U, T> {
+  D() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart';
+class C<T, U> {
+  factory C() = D<U, T>;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @25
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @27
+              defaultType: dynamic
+            covariant U @30
+              defaultType: dynamic
+          constructors
+            factory @45
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: ConstructorMember
+                base: package:test/foo.dart::<fragment>::@class::D::@constructor::new
+                substitution: {T: U, U: T}
+            _ @64
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 63
+              nameEnd: 65
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_imported_viaTypeAlias() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+typedef A = B;
+class B extends C {
+  B() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart';
+class C {
+  factory C() = A;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @25
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            factory @39
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: package:test/foo.dart::<fragment>::@class::B::@constructor::new
+            _ @52
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 51
+              nameEnd: 53
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_prefixed() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D extends C {
+  D() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+class C {
+  factory C() = foo.D;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @32
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            factory @46
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new
+            _ @63
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 62
+              nameEnd: 64
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_prefixed_generic() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+class D<T, U> extends C<U, T> {
+  D() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+class C<T, U> {
+  factory C() = foo.D<U, T>;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @32
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @34
+              defaultType: dynamic
+            covariant U @37
+              defaultType: dynamic
+          constructors
+            factory @52
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: ConstructorMember
+                base: package:test/foo.dart::<fragment>::@class::D::@constructor::new
+                substitution: {T: U, U: T}
+            _ @75
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 74
+              nameEnd: 76
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_prefixed_viaTypeAlias() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+import 'test.dart';
+typedef A = B;
+class B extends C {
+  B() : super._();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+class C {
+  factory C() = foo.A;
+  C._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @32
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            factory @46
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: package:test/foo.dart::<fragment>::@class::B::@constructor::new
+            _ @63
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 62
+              nameEnd: 64
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_unresolved() async {
+    var library = await buildLibrary('''
+class C<E> {
+  factory C() = D<E>;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant E @8
+              defaultType: dynamic
+          constructors
+            factory @23
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_constructor_redirected_factory_unnamed_viaTypeAlias() async {
+    var library = await buildLibrary('''
+typedef A = C;
+class B {
+  factory B() = A;
+  B._();
+}
+class C extends B {
+  C() : super._();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @21
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            factory @35
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
+            _ @48
+              reference: <testLibraryFragment>::@class::B::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::B
+              periodOffset: 47
+              nameEnd: 49
+        class C @61
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: B
+          constructors
+            @77
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::B::@constructor::_
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: C
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_named() async {
+    var library = await buildLibrary('''
+class C {
+  const C.named();
+  const C() : this.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const named @20
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 19
+              nameEnd: 25
+            const @37
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                RedirectingConstructorInvocation
+                  thisKeyword: this @43
+                  period: . @47
+                  constructorName: SimpleIdentifier
+                    token: named @48
+                    staticElement: <testLibraryFragment>::@class::C::@constructor::named
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @53
+                    rightParenthesis: ) @54
+                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
+              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_named_generic() async {
+    var library = await buildLibrary('''
+class C<T> {
+  const C.named();
+  const C() : this.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const named @23
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 22
+              nameEnd: 28
+            const @40
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                RedirectingConstructorInvocation
+                  thisKeyword: this @46
+                  period: . @50
+                  constructorName: SimpleIdentifier
+                    token: named @51
+                    staticElement: <testLibraryFragment>::@class::C::@constructor::named
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @56
+                    rightParenthesis: ) @57
+                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
+              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_named_notConst() async {
+    var library = await buildLibrary('''
+class C {
+  C.named();
+  C() : this.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            named @14
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 13
+              nameEnd: 19
+            @25
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_unnamed() async {
+    var library = await buildLibrary('''
+class C {
+  const C();
+  const C.named() : this();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+            const named @33
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 32
+              nameEnd: 38
+              constantInitializers
+                RedirectingConstructorInvocation
+                  thisKeyword: this @43
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @47
+                    rightParenthesis: ) @48
+                  staticElement: <testLibraryFragment>::@class::C::@constructor::new
+              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_unnamed_generic() async {
+    var library = await buildLibrary('''
+class C<T> {
+  const C();
+  const C.named() : this();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+            const named @36
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 35
+              nameEnd: 41
+              constantInitializers
+                RedirectingConstructorInvocation
+                  thisKeyword: this @46
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @50
+                    rightParenthesis: ) @51
+                  staticElement: <testLibraryFragment>::@class::C::@constructor::new
+              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
+''');
+  }
+
+  test_class_constructor_redirected_thisInvocation_unnamed_notConst() async {
+    var library = await buildLibrary('''
+class C {
+  C();
+  C.named() : this();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+            named @21
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 20
+              nameEnd: 26
+              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
+''');
+  }
+
+  test_class_constructor_superConstructor_generic_named() async {
+    var library = await buildLibrary('''
+class A<T> {
+  A.named(T a);
+}
+class B extends A<int> {
+  B() : super.named(0);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            named @17
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 16
+              nameEnd: 22
+              parameters
+                requiredPositional a @25
+                  type: T
+        class B @37
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A<int>
+          constructors
+            @58
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::named
+                substitution: {T: int}
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_named() async {
+    var library = await buildLibrary('''
+class A {
+  A.named();
+}
+class B extends A {
+  B() : super.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            named @14
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 13
+              nameEnd: 19
+        class B @31
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @47
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::named
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_unnamed_explicit() async {
+    var library = await buildLibrary('''
+class A {}
+class B extends A {
+  B() : super();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @17
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @33
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_unnamed_implicit() async {
+    var library = await buildLibrary('''
+class A {}
+class B extends A {
+  B();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @17
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @33
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_superConstructor_notGeneric_unnamed_implicit2() async {
+    var library = await buildLibrary('''
+class A {}
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @17
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_constructor_unnamed_implicit() async {
+    var library = await buildLibrary('class C {}');
+    configuration.withDisplayName = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              displayName: C
+''');
+  }
+
+  test_class_constructor_withCycles_const() async {
+    var library = await buildLibrary('''
+class C {
+  final x;
+  const C() : x = const D();
+}
+class D {
+  final x;
+  const D() : x = const C();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            const @29
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: x @35
+                    staticElement: <testLibraryFragment>::@class::C::@field::x
+                    staticType: null
+                  equals: = @37
+                  expression: InstanceCreationExpression
+                    keyword: const @39
+                    constructorName: ConstructorName
+                      type: NamedType
+                        name: D @45
+                        element: <testLibraryFragment>::@class::D
+                        type: D
+                      staticElement: <testLibraryFragment>::@class::D::@constructor::new
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @46
+                      rightParenthesis: ) @47
+                    staticType: D
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+        class D @58
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @70
+              reference: <testLibraryFragment>::@class::D::@field::x
+              enclosingElement: <testLibraryFragment>::@class::D
+              type: dynamic
+          constructors
+            const @81
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: x @87
+                    staticElement: <testLibraryFragment>::@class::D::@field::x
+                    staticType: null
+                  equals: = @89
+                  expression: InstanceCreationExpression
+                    keyword: const @91
+                    constructorName: ConstructorName
+                      type: NamedType
+                        name: C @97
+                        element: <testLibraryFragment>::@class::C
+                        type: C
+                      staticElement: <testLibraryFragment>::@class::C::@constructor::new
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @98
+                      rightParenthesis: ) @99
+                    staticType: C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::D::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::D
+              returnType: dynamic
+''');
+  }
+
+  test_class_constructor_withCycles_nonConst() async {
+    var library = await buildLibrary('''
+class C {
+  final x;
+  C() : x = new D();
+}
+class D {
+  final x;
+  D() : x = new C();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @23
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+        class D @50
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @62
+              reference: <testLibraryFragment>::@class::D::@field::x
+              enclosingElement: <testLibraryFragment>::@class::D
+              type: dynamic
+          constructors
+            @67
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::D::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::D
+              returnType: dynamic
+''');
+  }
+
+  test_class_constructors_named() async {
+    var library = await buildLibrary('''
+class C {
+  C.foo();
+}
+''');
+    configuration.withDisplayName = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            foo @14
+              reference: <testLibraryFragment>::@class::C::@constructor::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              displayName: C.foo
+              periodOffset: 13
+              nameEnd: 17
+''');
+  }
+
+  test_class_constructors_unnamed() async {
+    var library = await buildLibrary('''
+class C {
+  C();
+}
+''');
+    configuration.withDisplayName = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              displayName: C
+''');
+  }
+
+  test_class_constructors_unnamed_new() async {
+    var library = await buildLibrary('''
+class C {
+  C.new();
+}
+''');
+    configuration.withDisplayName = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @14
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              displayName: C
+              periodOffset: 13
+              nameEnd: 17
+''');
+  }
+
+  test_class_documented() async {
+    var library = await buildLibrary('''
+/**
+ * Docs
+ */
+class C {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * Docs\n */
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_documented_mix() async {
+    var library = await buildLibrary('''
+/**
+ * aaa
+ */
+/**
+ * bbb
+ */
+class A {}
+
+/**
+ * aaa
+ */
+/// bbb
+/// ccc
+class B {}
+
+/// aaa
+/// bbb
+/**
+ * ccc
+ */
+class C {}
+
+/// aaa
+/// bbb
+/**
+ * ccc
+ */
+/// ddd
+class D {}
+
+/**
+ * aaa
+ */
+// bbb
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @36
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * bbb\n */
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @79
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// bbb\n/// ccc
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @122
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * ccc\n */
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @173
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// ddd
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @207
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * aaa\n */
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+''');
+  }
+
+  test_class_documented_tripleSlash() async {
+    var library = await buildLibrary('''
+/// first
+/// second
+/// third
+class C {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @37
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// first\n/// second\n/// third
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_documented_with_references() async {
+    var library = await buildLibrary('''
+/**
+ * Docs referring to [D] and [E]
+ */
+class C {}
+
+class D {}
+class E {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @47
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * Docs referring to [D] and [E]\n */
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @59
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @70
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+''');
+  }
+
+  test_class_documented_with_windows_line_endings() async {
+    var library = await buildLibrary('/**\r\n * Docs\r\n */\r\nclass C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @25
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * Docs\n */
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_documented_withLeadingNotDocumentation() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+class C {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @66
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * Docs\n */
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_documented_withMetadata() async {
+    var library = await buildLibrary('''
+/// Comment 1
+/// Comment 2
+@Annotation()
+class BeforeMeta {}
+
+/// Comment 1
+/// Comment 2
+@Annotation.named()
+class BeforeMetaNamed {}
+
+@Annotation()
+/// Comment 1
+/// Comment 2
+class AfterMeta {}
+
+/// Comment 1
+@Annotation()
+/// Comment 2
+class AroundMeta {}
+
+/// Doc comment.
+@Annotation()
+// Not doc comment.
+class DocBeforeMetaNotDocAfter {}
+
+class Annotation {
+  const Annotation();
+  const Annotation.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class BeforeMeta @48
+          reference: <testLibraryFragment>::@class::BeforeMeta
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1\n/// Comment 2
+          metadata
+            Annotation
+              atSign: @ @28
+              name: SimpleIdentifier
+                token: Annotation @29
+                staticElement: <testLibraryFragment>::@class::Annotation
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @39
+                rightParenthesis: ) @40
+              element: <testLibraryFragment>::@class::Annotation::@constructor::new
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::BeforeMeta::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::BeforeMeta
+        class BeforeMetaNamed @117
+          reference: <testLibraryFragment>::@class::BeforeMetaNamed
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1\n/// Comment 2
+          metadata
+            Annotation
+              atSign: @ @91
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: Annotation @92
+                  staticElement: <testLibraryFragment>::@class::Annotation
+                  staticType: null
+                period: . @102
+                identifier: SimpleIdentifier
+                  token: named @103
+                  staticElement: <testLibraryFragment>::@class::Annotation::@constructor::named
+                  staticType: null
+                staticElement: <testLibraryFragment>::@class::Annotation::@constructor::named
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @108
+                rightParenthesis: ) @109
+              element: <testLibraryFragment>::@class::Annotation::@constructor::named
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::BeforeMetaNamed::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::BeforeMetaNamed
+        class AfterMeta @185
+          reference: <testLibraryFragment>::@class::AfterMeta
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1\n/// Comment 2
+          metadata
+            Annotation
+              atSign: @ @137
+              name: SimpleIdentifier
+                token: Annotation @138
+                staticElement: <testLibraryFragment>::@class::Annotation
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @148
+                rightParenthesis: ) @149
+              element: <testLibraryFragment>::@class::Annotation::@constructor::new
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::AfterMeta::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::AfterMeta
+        class AroundMeta @247
+          reference: <testLibraryFragment>::@class::AroundMeta
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 2
+          metadata
+            Annotation
+              atSign: @ @213
+              name: SimpleIdentifier
+                token: Annotation @214
+                staticElement: <testLibraryFragment>::@class::Annotation
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @224
+                rightParenthesis: ) @225
+              element: <testLibraryFragment>::@class::Annotation::@constructor::new
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::AroundMeta::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::AroundMeta
+        class DocBeforeMetaNotDocAfter @319
+          reference: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Doc comment.
+          metadata
+            Annotation
+              atSign: @ @279
+              name: SimpleIdentifier
+                token: Annotation @280
+                staticElement: <testLibraryFragment>::@class::Annotation
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @290
+                rightParenthesis: ) @291
+              element: <testLibraryFragment>::@class::Annotation::@constructor::new
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter
+        class Annotation @354
+          reference: <testLibraryFragment>::@class::Annotation
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @375
+              reference: <testLibraryFragment>::@class::Annotation::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::Annotation
+            const named @408
+              reference: <testLibraryFragment>::@class::Annotation::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::Annotation
+              periodOffset: 407
+              nameEnd: 413
+''');
+  }
+
+  test_class_field_abstract() async {
+    var library = await buildLibrary('''
+abstract class C {
+  abstract int i;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class C @15
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            abstract i @34
+              reference: <testLibraryFragment>::@class::C::@field::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic abstract get i @-1
+              reference: <testLibraryFragment>::@class::C::@getter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic abstract set i= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _i @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_field_const() async {
+    var library = await buildLibrary('class C { static const int i = 0; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const i @27
+              reference: <testLibraryFragment>::@class::C::@field::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @31
+                  staticType: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get i @-1
+              reference: <testLibraryFragment>::@class::C::@getter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_field_const_late() async {
+    var library =
+        await buildLibrary('class C { static late const int i = 0; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static late const i @32
+              reference: <testLibraryFragment>::@class::C::@field::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @36
+                  staticType: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get i @-1
+              reference: <testLibraryFragment>::@class::C::@getter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_field_covariant() async {
+    var library = await buildLibrary('''
+class C {
+  covariant int x;
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            covariant x @26
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional covariant _x @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_field_documented() async {
+    var library = await buildLibrary('''
+class C {
+  /**
+   * Docs
+   */
+  var x;
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @38
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /**\n   * Docs\n   */
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_field_duplicate_getter() async {
+    var library = await buildLibrary('''
+class C {
+  int foo = 0;
+  int get foo => 0;
+}
+''');
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            foo @16
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              id: field_1
+              getter: getter_1
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::C::@getter::foo::@def::0
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+            get foo @35
+              reference: <testLibraryFragment>::@class::C::@getter::foo::@def::1
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+              id: getter_1
+              variable: field_1
+''');
+  }
+
+  test_class_field_duplicate_setter() async {
+    var library = await buildLibrary('''
+class C {
+  int foo = 0;
+  set foo(int _) {}
+}
+''');
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            foo @16
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              id: field_1
+              setter: setter_1
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::C::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::foo::@def::0
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+            set foo= @31
+              reference: <testLibraryFragment>::@class::C::@setter::foo::@def::1
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _ @39
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+''');
+  }
+
+  test_class_field_external() async {
+    var library = await buildLibrary('''
+abstract class C {
+  external int i;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class C @15
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            external i @34
+              reference: <testLibraryFragment>::@class::C::@field::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get i @-1
+              reference: <testLibraryFragment>::@class::C::@getter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set i= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _i @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_field_final_hasInitializer_hasConstConstructor() async {
+    var library = await buildLibrary('''
+class C {
+  final x = 42;
+  const C();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 42 @22
+                  staticType: int
+          constructors
+            const @34
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_field_final_hasInitializer_hasConstConstructor_genericFunctionType() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A();
+}
+class B {
+  final f = const A<int Function(double a)>();
+  const B();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @34
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          fields
+            final f @46
+              reference: <testLibraryFragment>::@class::B::@field::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: A<int Function(double)>
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  keyword: const @50
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @56
+                      typeArguments: TypeArgumentList
+                        leftBracket: < @57
+                        arguments
+                          GenericFunctionType
+                            returnType: NamedType
+                              name: int @58
+                              element: dart:core::<fragment>::@class::int
+                              type: int
+                            functionKeyword: Function @62
+                            parameters: FormalParameterList
+                              leftParenthesis: ( @70
+                              parameter: SimpleFormalParameter
+                                type: NamedType
+                                  name: double @71
+                                  element: dart:core::<fragment>::@class::double
+                                  type: double
+                                name: a @78
+                                declaredElement: a@78
+                                  type: double
+                              rightParenthesis: ) @79
+                            declaredElement: GenericFunctionTypeElement
+                              parameters
+                                a
+                                  kind: required positional
+                                  type: double
+                              returnType: int
+                              type: int Function(double)
+                            type: int Function(double)
+                        rightBracket: > @80
+                      element: <testLibraryFragment>::@class::A
+                      type: A<int Function(double)>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@class::A::@constructor::new
+                      substitution: {T: int Function(double)}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @81
+                    rightParenthesis: ) @82
+                  staticType: A<int Function(double)>
+          constructors
+            const @93
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::B::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: A<int Function(double)>
+''');
+  }
+
+  test_class_field_final_hasInitializer_noConstConstructor() async {
+    var library = await buildLibrary('''
+class C {
+  final x = 42;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_field_final_withSetter() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int foo;
+  A(this.foo);
+  set foo(int newValue) {}
+}
+''');
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final foo @22
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          constructors
+            @29
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional final this.foo @36
+                  type: int
+                  field: <testLibraryFragment>::@class::A::@field::foo
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            set foo= @48
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional newValue @56
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+''');
+  }
+
+  test_class_field_formal_param_inferred_type_implicit() async {
+    var library = await buildLibrary('class C extends D { var v; C(this.v); }'
+        ' abstract class D { int get v; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          fields
+            v @24
+              reference: <testLibraryFragment>::@class::C::@field::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            @27
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.v @34
+                  type: int
+                  field: <testLibraryFragment>::@class::C::@field::v
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+          accessors
+            synthetic get v @-1
+              reference: <testLibraryFragment>::@class::C::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set v= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _v @-1
+                  type: int
+              returnType: void
+        abstract class D @55
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic v @-1
+              reference: <testLibraryFragment>::@class::D::@field::v
+              enclosingElement: <testLibraryFragment>::@class::D
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          accessors
+            abstract get v @67
+              reference: <testLibraryFragment>::@class::D::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::D
+              returnType: int
+''');
+  }
+
+  test_class_field_implicit_type() async {
+    var library = await buildLibrary('class C { var x; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_field_implicit_type_late() async {
+    var library = await buildLibrary('class C { late var x; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            late x @19
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_field_inferred_type_nonStatic_explicit_initialized() async {
+    var library = await buildLibrary('class C { num v = 0; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            v @14
+              reference: <testLibraryFragment>::@class::C::@field::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: num
+              shouldUseTypeForInitializerInference: true
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get v @-1
+              reference: <testLibraryFragment>::@class::C::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: num
+            synthetic set v= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _v @-1
+                  type: num
+              returnType: void
+''');
+  }
+
+  test_class_field_inferred_type_nonStatic_implicit_initialized() async {
+    var library = await buildLibrary('class C { var v = 0; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            v @14
+              reference: <testLibraryFragment>::@class::C::@field::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get v @-1
+              reference: <testLibraryFragment>::@class::C::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set v= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _v @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_field_inferred_type_nonStatic_implicit_uninitialized() async {
+    var library = await buildLibrary(
+        'class C extends D { var v; } abstract class D { int get v; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          fields
+            v @24
+              reference: <testLibraryFragment>::@class::C::@field::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+          accessors
+            synthetic get v @-1
+              reference: <testLibraryFragment>::@class::C::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set v= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _v @-1
+                  type: int
+              returnType: void
+        abstract class D @44
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic v @-1
+              reference: <testLibraryFragment>::@class::D::@field::v
+              enclosingElement: <testLibraryFragment>::@class::D
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          accessors
+            abstract get v @56
+              reference: <testLibraryFragment>::@class::D::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::D
+              returnType: int
+''');
+  }
+
+  test_class_field_inferred_type_nonStatic_inherited_resolveInitializer() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+abstract class A {
+  const A();
+  List<int> get f;
+}
+class B extends A {
+  const B();
+  final f = [a];
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class A @28
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic f @-1
+              reference: <testLibraryFragment>::@class::A::@field::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: List<int>
+          constructors
+            const @40
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            abstract get f @61
+              reference: <testLibraryFragment>::@class::A::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: List<int>
+        class B @72
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          fields
+            final f @107
+              reference: <testLibraryFragment>::@class::B::@field::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: List<int>
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @111
+                  elements
+                    SimpleIdentifier
+                      token: a @112
+                      staticElement: <testLibraryFragment>::@getter::a
+                      staticType: int
+                  rightBracket: ] @113
+                  staticType: List<int>
+          constructors
+            const @94
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::B::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: List<int>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @10
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_class_field_inferred_type_static_implicit_initialized() async {
+    var library = await buildLibrary('class C { static var v = 0; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static v @21
+              reference: <testLibraryFragment>::@class::C::@field::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@class::C::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic static set v= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _v @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_field_inheritedContextType_double() async {
+    var library = await buildLibrary('''
+abstract class A {
+  const A();
+  double get foo;
+}
+class B extends A {
+  const B();
+  final foo = 2;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class A @15
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: double
+          constructors
+            const @27
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            abstract get foo @45
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: double
+        class B @58
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          fields
+            final foo @93
+              reference: <testLibraryFragment>::@class::B::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: double
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 2 @99
+                  staticType: double
+          constructors
+            const @80
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::B::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: double
+''');
+  }
+
+  test_class_field_isPromotable_hasGetter() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+class B {
+  int? get _foo => 0;
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+  fieldNameNonPromotabilityInfo
+    _foo
+      conflictingGetters
+        <testLibraryFragment>::@class::B::@getter::_foo
+''');
+  }
+
+  test_class_field_isPromotable_hasGetter_abstract() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+abstract class B {
+  int? get _foo;
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+''');
+  }
+
+  test_class_field_isPromotable_hasGetter_inPart() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+part of 'test.dart';
+class B {
+  int? get _foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+part 'a.dart';
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @21
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final _foo @38
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  fieldNameNonPromotabilityInfo
+    _foo
+      conflictingGetters
+        <testLibrary>::@fragment::package:test/a.dart::@class::B::@getter::_foo
+''');
+  }
+
+  test_class_field_isPromotable_hasGetter_static() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+class B {
+  static int? get _foo => 0;
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+''');
+  }
+
+  test_class_field_isPromotable_hasNotFinalField() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+class B {
+  int? _foo;
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+  fieldNameNonPromotabilityInfo
+    _foo
+      conflictingFields
+        <testLibraryFragment>::@class::B::@field::_foo
+''');
+  }
+
+  test_class_field_isPromotable_hasNotFinalField_static() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+class B {
+  static int? _foo;
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+''');
+  }
+
+  test_class_field_isPromotable_hasSetter() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+class B {
+  set _field(int? _) {}
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+''');
+  }
+
+  test_class_field_isPromotable_language217() async {
+    var library = await buildLibrary(r'''
+// @dart = 2.19
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @22
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final _foo @39
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+''');
+  }
+
+  test_class_field_isPromotable_noSuchMethodForwarder_field() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+class B {
+  final int? _foo = 0;
+}
+
+/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
+class C implements B {
+  dynamic noSuchMethod(Invocation invocation) {}
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+  fieldNameNonPromotabilityInfo
+    _foo
+      conflictingNsmClasses
+        <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_field_isPromotable_noSuchMethodForwarder_field_implementedInMixin() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+mixin M {
+  final int? _foo = 0;
+}
+
+class B {
+  final int? _foo = 0;
+}
+
+/// `_foo` is implemented in [M].
+class C with M implements B {
+  dynamic noSuchMethod(Invocation invocation) {}
+}
+''');
+
+    configuration.forPromotableFields(
+      classNames: {'A', 'B'},
+      mixinNames: {'M'},
+    );
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+        class B @90
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _foo @107
+              reference: <testLibraryFragment>::@class::B::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: int?
+              shouldUseTypeForInitializerInference: true
+      mixins
+        mixin M @54
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            final promotable _foo @71
+              reference: <testLibraryFragment>::@mixin::M::@field::_foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int?
+              shouldUseTypeForInitializerInference: true
+''');
+  }
+
+  test_class_field_isPromotable_noSuchMethodForwarder_field_implementedInSuperclass() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+class B {
+  final int? _foo = 0;
+}
+
+class C {
+  final int? _foo = 0;
+}
+
+/// `_foo` is implemented in [B].
+class D extends B implements C {
+  dynamic noSuchMethod(Invocation invocation) {}
+}
+''');
+
+    configuration.forPromotableFields(
+      classNames: {'A', 'B'},
+    );
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+        class B @54
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _foo @71
+              reference: <testLibraryFragment>::@class::B::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: int?
+              shouldUseTypeForInitializerInference: true
+''');
+  }
+
+  test_class_field_isPromotable_noSuchMethodForwarder_field_inClassTypeAlias() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+class B {
+  final int? _foo = 0;
+}
+
+mixin M {
+  dynamic noSuchMethod(Invocation invocation) {}
+}
+
+/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
+class E = Object with M implements B;
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+  fieldNameNonPromotabilityInfo
+    _foo
+      conflictingNsmClasses
+        <testLibraryFragment>::@class::E
+''');
+  }
+
+  test_class_field_isPromotable_noSuchMethodForwarder_field_inEnum() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+class B {
+  final int? _foo = 0;
+}
+
+/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
+enum E implements B {
+  v;
+  dynamic noSuchMethod(Invocation invocation) {}
+}
+''');
+
+    configuration.forPromotableFields(
+      classNames: {'A', 'B'},
+    );
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+        class B @54
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          fields
+            final _foo @71
+              reference: <testLibraryFragment>::@class::B::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: int?
+              shouldUseTypeForInitializerInference: true
+  fieldNameNonPromotabilityInfo
+    _foo
+      conflictingNsmClasses
+        <testLibraryFragment>::@enum::E
+''');
+  }
+
+  test_class_field_isPromotable_noSuchMethodForwarder_getter() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+abstract class B {
+  int? get _foo;
+}
+
+/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
+class C implements B {
+  dynamic noSuchMethod(Invocation invocation) {}
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+  fieldNameNonPromotabilityInfo
+    _foo
+      conflictingNsmClasses
+        <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_field_isPromotable_noSuchMethodForwarder_inDifferentLibrary() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class B {
+  int? get _foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+/// Has a noSuchMethod thrower for B._field, but since private names in
+/// different libraries are distinct, this has no effect on promotion of
+/// C._field.
+class C implements B {
+  dynamic noSuchMethod(Invocation invocation) {}
+}
+''');
+
+    configuration.forPromotableFields(
+      classNames: {'A'},
+    );
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class A @24
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _foo @41
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+''');
+  }
+
+  test_class_field_isPromotable_noSuchMethodForwarder_inheritedInterface() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+class B extends A {
+  A(super.value);
+}
+
+/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
+class C implements B {
+  dynamic noSuchMethod(Invocation invocation) {}
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+  fieldNameNonPromotabilityInfo
+    _foo
+      conflictingNsmClasses
+        <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_field_isPromotable_noSuchMethodForwarder_mixedInterface() async {
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+mixin M {
+  final int? _foo = 0;
+}
+
+class B with M {}
+
+/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
+class C implements B {
+  dynamic noSuchMethod(Invocation invocation) {}
+}
+''');
+
+    configuration.forPromotableFields(
+      classNames: {'A'},
+      mixinNames: {'M'},
+    );
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+      mixins
+        mixin M @54
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            final _foo @71
+              reference: <testLibraryFragment>::@mixin::M::@field::_foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int?
+              shouldUseTypeForInitializerInference: true
+  fieldNameNonPromotabilityInfo
+    _foo
+      conflictingNsmClasses
+        <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_field_isPromotable_noSuchMethodForwarder_unusedMixin() async {
+    // Mixins are implicitly abstract so the presence of a mixin that inherits
+    // a field into its interface, and doesn't implement it, doesn't mean that
+    // a noSuchMethod forwarder created for it. So,  this does not block that
+    // field from promoting.
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  A(this._foo);
+}
+
+mixin M implements A {
+  dynamic noSuchMethod(Invocation invocation) {}
+}
+''');
+
+    configuration.forPromotableFields(
+      classNames: {'A'},
+    );
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+''');
+  }
+
+  test_class_field_isPromotable_notFinal() async {
+    var library = await buildLibrary(r'''
+class A {
+  int? _foo;
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            _foo @17
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+  fieldNameNonPromotabilityInfo
+    _foo
+      conflictingFields
+        <testLibraryFragment>::@class::A::@field::_foo
+''');
+  }
+
+  test_class_field_isPromotable_notPrivate() async {
+    var library = await buildLibrary(r'''
+class A {
+  int? field;
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            field @17
+              reference: <testLibraryFragment>::@class::A::@field::field
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+''');
+  }
+
+  test_class_field_isPromotable_typeInference() async {
+    // We decide that `_foo` is promotable before inferring the type of `bar`.
+    var library = await buildLibrary(r'''
+class A {
+  final int? _foo;
+  final bar = _foo != null ? _foo : 0;
+  A(this._foo);
+}
+''');
+
+    configuration.forPromotableFields(classNames: {'A'});
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final promotable _foo @23
+              reference: <testLibraryFragment>::@class::A::@field::_foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int?
+            final bar @37
+              reference: <testLibraryFragment>::@class::A::@field::bar
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: false
+''');
+  }
+
+  test_class_field_propagatedType_const_noDep() async {
+    var library = await buildLibrary('''
+class C {
+  static const x = 0;
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const x @25
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @29
+                  staticType: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_field_propagatedType_final_dep_inLib() async {
+    addSource('$testPackageLibPath/a.dart', 'final a = 1;');
+    var library = await buildLibrary('''
+import "a.dart";
+class C {
+  final b = a / 2;
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @23
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final b @35
+              reference: <testLibraryFragment>::@class::C::@field::b
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: double
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get b @-1
+              reference: <testLibraryFragment>::@class::C::@getter::b
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: double
+''');
+  }
+
+  test_class_field_propagatedType_final_dep_inPart() async {
+    addSource('$testPackageLibPath/a.dart', 'part of lib; final a = 1;');
+    var library = await buildLibrary('''
+library lib;
+part "a.dart";
+class C {
+  final b = a / 2;
+}''');
+    checkElementText(library, r'''
+library
+  name: lib
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        class C @34
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final b @46
+              reference: <testLibraryFragment>::@class::C::@field::b
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: double
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get b @-1
+              reference: <testLibraryFragment>::@class::C::@getter::b
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: double
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static final a @19
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::a
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::a
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+''');
+  }
+
+  test_class_field_propagatedType_final_noDep_instance() async {
+    var library = await buildLibrary('''
+class C {
+  final x = 0;
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_field_propagatedType_final_noDep_static() async {
+    var library = await buildLibrary('''
+class C {
+  static final x = 0;
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static final x @25
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_field_static() async {
+    var library = await buildLibrary('class C { static int i; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static i @21
+              reference: <testLibraryFragment>::@class::C::@field::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get i @-1
+              reference: <testLibraryFragment>::@class::C::@getter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic static set i= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _i @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_field_static_final_hasConstConstructor() async {
+    var library = await buildLibrary('''
+class C {
+  static final f = 0;
+  const C();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static final f @25
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            const @40
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get f @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_field_static_final_untyped() async {
+    var library = await buildLibrary('class C { static final x = 0; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static final x @23
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_field_static_late() async {
+    var library = await buildLibrary('class C { static late int i; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static late i @26
+              reference: <testLibraryFragment>::@class::C::@field::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get i @-1
+              reference: <testLibraryFragment>::@class::C::@getter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic static set i= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _i @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_field_type_explicit() async {
+    var library = await buildLibrary(r'''
+class C {
+  int a = 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            a @16
+              reference: <testLibraryFragment>::@class::C::@field::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get a @-1
+              reference: <testLibraryFragment>::@class::C::@getter::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set a= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _a @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_field_type_inferred_fromInitializer() async {
+    var library = await buildLibrary(r'''
+class C {
+  var foo = 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            foo @16
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::C::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_field_type_inferred_fromSuper() async {
+    var library = await buildLibrary(r'''
+abstract class A {
+  int get foo;
+}
+
+class B extends A {
+  final foo = 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class A @15
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            abstract get foo @29
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+        class B @43
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          fields
+            final foo @65
+              reference: <testLibraryFragment>::@class::B::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: int
+              shouldUseTypeForInitializerInference: true
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::B::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: int
+''');
+  }
+
+  test_class_field_type_inferred_Never() async {
+    var library = await buildLibrary(r'''
+class C {
+  var a = throw 42;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            a @16
+              reference: <testLibraryFragment>::@class::C::@field::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: Never
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get a @-1
+              reference: <testLibraryFragment>::@class::C::@getter::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: Never
+            synthetic set a= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _a @-1
+                  type: Never
+              returnType: void
+''');
+  }
+
+  test_class_field_typed() async {
+    var library = await buildLibrary('class C { int x = 0; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_field_untyped() async {
+    var library = await buildLibrary('class C { var x = 0; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @14
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_fields() async {
+    var library = await buildLibrary('class C { int i; int j; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            i @14
+              reference: <testLibraryFragment>::@class::C::@field::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+            j @21
+              reference: <testLibraryFragment>::@class::C::@field::j
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get i @-1
+              reference: <testLibraryFragment>::@class::C::@getter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set i= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::i
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _i @-1
+                  type: int
+              returnType: void
+            synthetic get j @-1
+              reference: <testLibraryFragment>::@class::C::@getter::j
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set j= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::j
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _j @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_fields_late() async {
+    var library = await buildLibrary('''
+class C {
+  late int foo;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            late foo @21
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::C::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_fields_late_final() async {
+    var library = await buildLibrary('''
+class C {
+  late final int foo;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            late final foo @27
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::C::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_fields_late_final_initialized() async {
+    var library = await buildLibrary('''
+class C {
+  late final int foo = 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            late final foo @27
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::C::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_fields_late_inference_usingSuper_methodInvocation() async {
+    var library = await buildLibrary('''
+class A {
+  int foo() => 0;
+}
+
+class B extends A {
+  late var f = super.foo();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @16
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+        class B @37
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          fields
+            late f @62
+              reference: <testLibraryFragment>::@class::B::@field::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::B::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: int
+            synthetic set f= @-1
+              reference: <testLibraryFragment>::@class::B::@setter::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional _f @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_fields_late_inference_usingSuper_propertyAccess() async {
+    var library = await buildLibrary('''
+class A {
+  int get foo => 0;
+}
+
+class B extends A {
+  late var f = super.foo;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo @20
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+        class B @39
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          fields
+            late f @64
+              reference: <testLibraryFragment>::@class::B::@field::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::B::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: int
+            synthetic set f= @-1
+              reference: <testLibraryFragment>::@class::B::@setter::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional _f @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_final() async {
+    var library = await buildLibrary('final class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        final class C @12
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_getter_abstract() async {
+    var library = await buildLibrary('abstract class C { int get x; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class C @15
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            abstract get x @27
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_getter_external() async {
+    var library = await buildLibrary('class C { external int get x; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            external get x @27
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_getter_implicit_return_type() async {
+    var library = await buildLibrary('class C { get x => null; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            get x @14
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_class_getter_invokesSuperSelf_getter() async {
+    var library = await buildLibrary(r'''
+class A {
+  int get foo {
+    super.foo;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo @20 invokesSuperSelf
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+''');
+  }
+
+  test_class_getter_invokesSuperSelf_getter_nestedInAssignment() async {
+    var library = await buildLibrary(r'''
+class A {
+  int get foo {
+    (super.foo).foo = 0;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo @20 invokesSuperSelf
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+''');
+  }
+
+  test_class_getter_invokesSuperSelf_setter() async {
+    var library = await buildLibrary(r'''
+class A {
+  int get foo {
+    super.foo = 0;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo @20
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+''');
+  }
+
+  test_class_getter_native() async {
+    var library = await buildLibrary('''
+class C {
+  int get x() native;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            external get x @20
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_getter_static() async {
+    var library = await buildLibrary('class C { static int get x => null; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic static x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            static get x @25
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_getters() async {
+    var library =
+        await buildLibrary('class C { int get x => null; get y => null; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+            synthetic y @-1
+              reference: <testLibraryFragment>::@class::C::@field::y
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            get x @18
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            get y @33
+              reference: <testLibraryFragment>::@class::C::@getter::y
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_class_implicitField_getterFirst() async {
+    var library = await buildLibrary('''
+class C {
+  int get x => 0;
+  void set x(int value) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            get x @20
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            set x= @39
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @45
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_implicitField_setterFirst() async {
+    var library = await buildLibrary('''
+class C {
+  void set x(int value) {}
+  int get x => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            set x= @21
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @27
+                  type: int
+              returnType: void
+            get x @47
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_interface() async {
+    var library = await buildLibrary('interface class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        interface class C @16
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_interfaces() async {
+    var library = await buildLibrary('''
+class C implements D, E {}
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            D
+            E
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @33
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @44
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+''');
+  }
+
+  test_class_interfaces_extensionType() async {
+    var library = await buildLibrary('''
+class A {}
+extension type B(int it) {}
+class C {}
+class D implements A, B, C {}
+''');
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+        class C @45
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+        class D @56
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            A
+            C
+      extensionTypes
+        B @26
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: int
+          fields
+            final it @32
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: int
+''');
+  }
+
+  test_class_interfaces_Function() async {
+    var library = await buildLibrary('''
+class A {}
+class B {}
+class C implements A, Function, B {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @17
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @28
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            A
+            B
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_interfaces_unresolved() async {
+    var library = await buildLibrary(
+        'class C implements X, Y, Z {} class X {} class Z {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            X
+            Z
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class X @36
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+        class Z @47
+          reference: <testLibraryFragment>::@class::Z
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::Z::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::Z
+''');
+  }
+
+  test_class_method_abstract() async {
+    var library = await buildLibrary('abstract class C { f(); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class C @15
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            abstract f @19
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_class_method_async() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+class C {
+  Future f() async {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @27
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @40 async
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: Future<dynamic>
+''');
+  }
+
+  test_class_method_asyncStar() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+class C {
+  Stream f() async* {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @27
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @40 async*
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: Stream<dynamic>
+''');
+  }
+
+  test_class_method_documented() async {
+    var library = await buildLibrary('''
+class C {
+  /**
+   * Docs
+   */
+  f() {}
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @34
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /**\n   * Docs\n   */
+              returnType: dynamic
+''');
+  }
+
+  test_class_method_external() async {
+    var library = await buildLibrary('class C { external f(); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            external f @19
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_class_method_hasImplicitReturnType_false() async {
+    var library = await buildLibrary('''
+class C {
+  int m() => 0;
+}
+''');
+    var c = library.definingCompilationUnit.classes.single;
+    var m = c.methods.single;
+    expect(m.hasImplicitReturnType, isFalse);
+  }
+
+  test_class_method_hasImplicitReturnType_true() async {
+    var library = await buildLibrary('''
+class C {
+  m() => 0;
+}
+''');
+    var c = library.definingCompilationUnit.classes.single;
+    var m = c.methods.single;
+    expect(m.hasImplicitReturnType, isTrue);
+  }
+
+  test_class_method_inferred_type_nonStatic_implicit_param() async {
+    var library = await buildLibrary('class C extends D { void f(value) {} }'
+        ' abstract class D { void f(int value); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+          methods
+            f @25
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @27
+                  type: int
+              returnType: void
+        abstract class D @54
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          methods
+            abstract f @63
+              reference: <testLibraryFragment>::@class::D::@method::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              parameters
+                requiredPositional value @69
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_method_inferred_type_nonStatic_implicit_return() async {
+    var library = await buildLibrary('''
+class C extends D {
+  f() => null;
+}
+abstract class D {
+  int f();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+          methods
+            f @22
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+        abstract class D @52
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          methods
+            abstract f @62
+              reference: <testLibraryFragment>::@class::D::@method::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              returnType: int
+''');
+  }
+
+  test_class_method_invokesSuperSelf() async {
+    var library = await buildLibrary(r'''
+class A {
+  void foo() {
+    super.foo();
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @17 invokesSuperSelf
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+''');
+  }
+
+  test_class_method_namedAsSupertype() async {
+    var library = await buildLibrary(r'''
+class A {}
+class B extends A {
+  void A() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @17
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+          methods
+            A @38
+              reference: <testLibraryFragment>::@class::B::@method::A
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: void
+''');
+  }
+
+  test_class_method_native() async {
+    var library = await buildLibrary('''
+class C {
+  int m() native;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            external m @16
+              reference: <testLibraryFragment>::@class::C::@method::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_class_method_params() async {
+    var library = await buildLibrary('class C { f(x, y) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @10
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional x @12
+                  type: dynamic
+                requiredPositional y @15
+                  type: dynamic
+              returnType: dynamic
+''');
+  }
+
+  test_class_method_static() async {
+    var library = await buildLibrary('class C { static f() {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            static f @17
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_class_method_syncStar() async {
+    var library = await buildLibrary(r'''
+class C {
+  Iterable<int> f() sync* {
+    yield 42;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @26 sync*
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: Iterable<int>
+''');
+  }
+
+  test_class_method_type_parameter() async {
+    var library = await buildLibrary('class C { T f<T, U>(U u) => null; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @12
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              typeParameters
+                covariant T @14
+                  defaultType: dynamic
+                covariant U @17
+                  defaultType: dynamic
+              parameters
+                requiredPositional u @22
+                  type: U
+              returnType: T
+''');
+  }
+
+  test_class_method_type_parameter_in_generic_class() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  V f<V, W>(T t, U u, W w) => null;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @20
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              typeParameters
+                covariant V @22
+                  defaultType: dynamic
+                covariant W @25
+                  defaultType: dynamic
+              parameters
+                requiredPositional t @30
+                  type: T
+                requiredPositional u @35
+                  type: U
+                requiredPositional w @40
+                  type: W
+              returnType: V
+''');
+  }
+
+  test_class_method_type_parameter_with_function_typed_parameter() async {
+    var library = await buildLibrary('class C { void f<T, U>(T x(U u)) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @15
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              typeParameters
+                covariant T @17
+                  defaultType: dynamic
+                covariant U @20
+                  defaultType: dynamic
+              parameters
+                requiredPositional x @25
+                  type: T Function(U)
+                  parameters
+                    requiredPositional u @29
+                      type: U
+              returnType: void
+''');
+  }
+
+  test_class_methods() async {
+    var library = await buildLibrary('class C { f() {} g() {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @10
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            g @17
+              reference: <testLibraryFragment>::@class::C::@method::g
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_class_mixin_class() async {
+    var library = await buildLibrary('mixin class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        mixin class C @12
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_mixins() async {
+    var library = await buildLibrary('''
+class C extends D with E, F, G {}
+class D {}
+class E {}
+class F {}
+class G {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          mixins
+            E
+            F
+            G
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @40
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @51
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+        class F @62
+          reference: <testLibraryFragment>::@class::F
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::F::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::F
+        class G @73
+          reference: <testLibraryFragment>::@class::G
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::G::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::G
+''');
+  }
+
+  test_class_mixins_extensionType() async {
+    var library = await buildLibrary('''
+mixin A {}
+extension type B(int it) {}
+mixin C {}
+class D extends Object with A, B, C {}
+''');
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class D @56
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            A
+            C
+      extensionTypes
+        B @26
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: int
+          fields
+            final it @32
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: int
+      mixins
+        mixin A @6
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+        mixin C @45
+          reference: <testLibraryFragment>::@mixin::C
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_class_mixins_generic() async {
+    var library = await buildLibrary('''
+class Z extends A with B<int>, C<double> {}
+class A {}
+class B<B1> {}
+class C<C1> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class Z @6
+          reference: <testLibraryFragment>::@class::Z
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          mixins
+            B<int>
+            C<double>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::Z::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::Z
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+        class A @50
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @61
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant B1 @63
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @76
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant C1 @78
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_mixins_genericMixin_tooManyArguments() async {
+    var library = await buildLibrary('''
+mixin M<T> {}
+class A extends Object with M<int, String> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @20
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_class_mixins_typeParameter() async {
+    var library = await buildLibrary('''
+mixin M1 {}
+mixin M2 {}
+class A<T> extends Object with M1, T<int>, M2 {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @30
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @32
+              defaultType: dynamic
+          supertype: Object
+          mixins
+            M1
+            M2
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      mixins
+        mixin M1 @6
+          reference: <testLibraryFragment>::@mixin::M1
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+        mixin M2 @18
+          reference: <testLibraryFragment>::@mixin::M2
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_class_mixins_unresolved() async {
+    var library = await buildLibrary(
+        'class C extends Object with X, Y, Z {} class X {} class Z {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            X
+            Z
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class X @45
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+        class Z @56
+          reference: <testLibraryFragment>::@class::Z
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::Z::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::Z
+''');
+  }
+
+  test_class_notSimplyBounded_circularity_via_typeAlias_recordType() async {
+    var library = await buildLibrary('''
+class C<T extends A> {}
+typedef A = (C, int);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: dynamic
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        notSimplyBounded A @32
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: (C<dynamic>, int)
+''');
+  }
+
+  test_class_notSimplyBounded_circularity_via_typedef() async {
+    // C's type parameter T is not simply bounded because its bound, F, expands
+    // to `dynamic F(C)`, which refers to C.
+    var library = await buildLibrary('''
+class C<T extends F> {}
+typedef F(C value);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: dynamic
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        functionTypeAliasBased notSimplyBounded F @32
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function(C<dynamic>)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional value @36
+                type: C<dynamic>
+            returnType: dynamic
+''');
+  }
+
+  test_class_notSimplyBounded_circularity_with_type_params() async {
+    // C's type parameter T is simply bounded because even though it refers to
+    // C, it specifies a bound.
+    var library = await buildLibrary('''
+class C<T extends C<dynamic>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: C<dynamic>
+              defaultType: C<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_notSimplyBounded_complex_by_cycle_class() async {
+    var library = await buildLibrary('''
+class C<T extends D> {}
+class D<T extends C> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: D<dynamic>
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        notSimplyBounded class D @30
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @32
+              bound: C<dynamic>
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+''');
+  }
+
+  test_class_notSimplyBounded_complex_by_cycle_typedef_functionType() async {
+    var library = await buildLibrary('''
+typedef C<T extends D> = void Function();
+typedef D<T extends C> = void Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        notSimplyBounded C @8
+          reference: <testLibraryFragment>::@typeAlias::C
+          typeParameters
+            unrelated T @10
+              bound: dynamic
+              defaultType: dynamic
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+        notSimplyBounded D @50
+          reference: <testLibraryFragment>::@typeAlias::D
+          typeParameters
+            unrelated T @52
+              bound: dynamic
+              defaultType: dynamic
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_class_notSimplyBounded_complex_by_cycle_typedef_interfaceType() async {
+    var library = await buildLibrary('''
+typedef C<T extends D> = List<T>;
+typedef D<T extends C> = List<T>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        notSimplyBounded C @8
+          reference: <testLibraryFragment>::@typeAlias::C
+          typeParameters
+            covariant T @10
+              bound: dynamic
+              defaultType: dynamic
+          aliasedType: List<T>
+        notSimplyBounded D @42
+          reference: <testLibraryFragment>::@typeAlias::D
+          typeParameters
+            covariant T @44
+              bound: dynamic
+              defaultType: dynamic
+          aliasedType: List<T>
+''');
+  }
+
+  test_class_notSimplyBounded_complex_by_reference_to_cycle() async {
+    var library = await buildLibrary('''
+class C<T extends D> {}
+class D<T extends D> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: D<dynamic>
+              defaultType: D<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        notSimplyBounded class D @30
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @32
+              bound: D<dynamic>
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+''');
+  }
+
+  test_class_notSimplyBounded_complex_by_use_of_parameter() async {
+    var library = await buildLibrary('''
+class C<T extends D<T>> {}
+class D<T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: D<T>
+              defaultType: D<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @33
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @35
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+''');
+  }
+
+  test_class_notSimplyBounded_dependency_with_type_params() async {
+    // C's type parameter T is simply bounded because even though it refers to
+    // non-simply-bounded type D, it specifies a bound.
+    var library = await buildLibrary('''
+class C<T extends D<dynamic>> {}
+class D<T extends D<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: D<dynamic>
+              defaultType: D<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        notSimplyBounded class D @39
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @41
+              bound: D<T>
+              defaultType: D<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+''');
+  }
+
+  test_class_notSimplyBounded_function_typed_bound_complex_via_parameter_type() async {
+    var library = await buildLibrary('''
+class C<T extends void Function(T)> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: void Function(T)
+              defaultType: void Function(Never)
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_notSimplyBounded_function_typed_bound_complex_via_return_type() async {
+    var library = await buildLibrary('''
+class C<T extends T Function()> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: T Function()
+              defaultType: dynamic Function()
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_notSimplyBounded_function_typed_bound_simple() async {
+    var library = await buildLibrary('''
+class C<T extends void Function()> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: void Function()
+              defaultType: void Function()
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_notSimplyBounded_refers_to_circular_typedef() async {
+    // C's type parameter T has a bound of F, which is a circular typedef.  This
+    // is illegal in Dart, but we need to make sure it doesn't lead to a crash
+    // or infinite loop.
+    var library = await buildLibrary('''
+class C<T extends F> {}
+typedef F(G value);
+typedef G(F value);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: dynamic
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        functionTypeAliasBased notSimplyBounded F @32
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function(dynamic)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional value @36
+                type: dynamic
+            returnType: dynamic
+        functionTypeAliasBased notSimplyBounded G @52
+          reference: <testLibraryFragment>::@typeAlias::G
+          aliasedType: dynamic Function(dynamic)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional value @56
+                type: dynamic
+            returnType: dynamic
+''');
+  }
+
+  test_class_notSimplyBounded_self() async {
+    var library = await buildLibrary('''
+class C<T extends C> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: C<dynamic>
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_notSimplyBounded_simple_because_non_generic() async {
+    // If no type parameters are specified, then the class is simply bounded, so
+    // there is no reason to assign it a slot.
+    var library = await buildLibrary('''
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_notSimplyBounded_simple_by_lack_of_cycles() async {
+    var library = await buildLibrary('''
+class C<T extends D> {}
+class D<T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: D<dynamic>
+              defaultType: D<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @30
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @32
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+''');
+  }
+
+  test_class_notSimplyBounded_simple_by_syntax() async {
+    // If no bounds are specified, then the class is simply bounded by syntax
+    // alone, so there is no reason to assign it a slot.
+    var library = await buildLibrary('''
+class C<T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_operator() async {
+    var library =
+        await buildLibrary('class C { C operator+(C other) => null; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            + @20
+              reference: <testLibraryFragment>::@class::C::@method::+
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional other @24
+                  type: C
+              returnType: C
+''');
+  }
+
+  test_class_operator_equal() async {
+    var library = await buildLibrary('''
+class C {
+  bool operator==(Object other) => false;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            == @25
+              reference: <testLibraryFragment>::@class::C::@method::==
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional other @35
+                  type: Object
+              returnType: bool
+''');
+  }
+
+  test_class_operator_external() async {
+    var library =
+        await buildLibrary('class C { external C operator+(C other); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            external + @29
+              reference: <testLibraryFragment>::@class::C::@method::+
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional other @33
+                  type: C
+              returnType: C
+''');
+  }
+
+  test_class_operator_greater_equal() async {
+    var library = await buildLibrary('''
+class C {
+  bool operator>=(C other) => false;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            >= @25
+              reference: <testLibraryFragment>::@class::C::@method::>=
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional other @30
+                  type: C
+              returnType: bool
+''');
+  }
+
+  test_class_operator_index() async {
+    var library =
+        await buildLibrary('class C { bool operator[](int i) => null; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            [] @23
+              reference: <testLibraryFragment>::@class::C::@method::[]
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional i @30
+                  type: int
+              returnType: bool
+''');
+  }
+
+  test_class_operator_index_set() async {
+    var library = await buildLibrary('''
+class C {
+  void operator[]=(int i, bool v) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            []= @25
+              reference: <testLibraryFragment>::@class::C::@method::[]=
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional i @33
+                  type: int
+                requiredPositional v @41
+                  type: bool
+              returnType: void
+''');
+  }
+
+  test_class_operator_less_equal() async {
+    var library = await buildLibrary('''
+class C {
+  bool operator<=(C other) => false;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            <= @25
+              reference: <testLibraryFragment>::@class::C::@method::<=
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional other @30
+                  type: C
+              returnType: bool
+''');
+  }
+
+  test_class_ref_nullability_none() async {
+    var library = await buildLibrary('''
+class C {}
+C c;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static c @13
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+''');
+  }
+
+  test_class_ref_nullability_question() async {
+    var library = await buildLibrary('''
+class C {}
+C? c;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static c @14
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C?
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C?
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C?
+          returnType: void
+''');
+  }
+
+  test_class_sealed() async {
+    var library = await buildLibrary('sealed class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract sealed class C @13
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_sealed_induced_base_extends_base() async {
+    var library = await buildLibrary('''
+base class A {}
+sealed class B extends A {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        base class A @11
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        abstract sealed base class B @29
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_sealed_induced_base_implements_base() async {
+    var library = await buildLibrary('''
+base class A {}
+sealed class B implements A {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        base class A @11
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        abstract sealed base class B @29
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+''');
+  }
+
+  test_class_sealed_induced_base_implements_final() async {
+    var library = await buildLibrary('''
+final class A {}
+sealed class B implements A {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        final class A @12
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        abstract sealed base class B @30
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+''');
+  }
+
+  test_class_sealed_induced_final_extends_final() async {
+    var library = await buildLibrary('''
+final class A {}
+sealed class B extends A {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        final class A @12
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        abstract sealed final class B @30
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_sealed_induced_final_with_base_mixin() async {
+    var library = await buildLibrary('''
+base mixin A {}
+interface class B {}
+sealed class C extends B with A {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        interface class B @32
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        abstract sealed final class C @50
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: B
+          mixins
+            A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::B::@constructor::new
+      mixins
+        base mixin A @11
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_class_sealed_induced_interface_extends_interface() async {
+    var library = await buildLibrary('''
+interface class A {}
+sealed class B extends A {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        interface class A @16
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        abstract sealed interface class B @34
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_class_sealed_induced_none_implements_interface() async {
+    var library = await buildLibrary('''
+interface class A {}
+sealed class B implements A {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        interface class A @16
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        abstract sealed class B @34
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+''');
+  }
+
+  test_class_setter_abstract() async {
+    var library =
+        await buildLibrary('abstract class C { void set x(int value); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class C @15
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            abstract set x= @28
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @34
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_setter_covariant() async {
+    var library =
+        await buildLibrary('class C { void set x(covariant int value); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            abstract set x= @19
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional covariant value @35
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_setter_external() async {
+    var library =
+        await buildLibrary('class C { external void set x(int value); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            external set x= @28
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @34
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_setter_implicit_param_type() async {
+    var library = await buildLibrary('class C { void set x(value) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            set x= @19
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @21
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_setter_implicit_return_type() async {
+    var library = await buildLibrary('class C { set x(int value) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            set x= @14
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @20
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_setter_inferred_type_conflictingInheritance() async {
+    var library = await buildLibrary('''
+class A {
+  int t;
+}
+class B extends A {
+  double t;
+}
+class C extends A implements B {
+}
+class D extends C {
+  void set t(p) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            t @16
+              reference: <testLibraryFragment>::@class::A::@field::t
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get t @-1
+              reference: <testLibraryFragment>::@class::A::@getter::t
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+            synthetic set t= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::t
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _t @-1
+                  type: int
+              returnType: void
+        class B @27
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          fields
+            t @50
+              reference: <testLibraryFragment>::@class::B::@field::t
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: double
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+          accessors
+            synthetic get t @-1
+              reference: <testLibraryFragment>::@class::B::@getter::t
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: double
+            synthetic set t= @-1
+              reference: <testLibraryFragment>::@class::B::@setter::t
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional _t @-1
+                  type: double
+              returnType: void
+        class C @61
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          interfaces
+            B
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+        class D @96
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          supertype: C
+          fields
+            synthetic t @-1
+              reference: <testLibraryFragment>::@class::D::@field::t
+              enclosingElement: <testLibraryFragment>::@class::D
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+              superConstructor: <testLibraryFragment>::@class::C::@constructor::new
+          accessors
+            set t= @121
+              reference: <testLibraryFragment>::@class::D::@setter::t
+              enclosingElement: <testLibraryFragment>::@class::D
+              parameters
+                requiredPositional p @123
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_setter_inferred_type_nonStatic_implicit_param() async {
+    var library =
+        await buildLibrary('class C extends D { void set f(value) {} }'
+            ' abstract class D { void set f(int value); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          fields
+            synthetic f @-1
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+          accessors
+            set f= @29
+              reference: <testLibraryFragment>::@class::C::@setter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @31
+                  type: int
+              returnType: void
+        abstract class D @58
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic f @-1
+              reference: <testLibraryFragment>::@class::D::@field::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          accessors
+            abstract set f= @71
+              reference: <testLibraryFragment>::@class::D::@setter::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              parameters
+                requiredPositional value @77
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_setter_inferred_type_static_implicit_return() async {
+    var library = await buildLibrary('''
+class C {
+  static set f(int value) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic static f @-1
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            static set f= @23
+              reference: <testLibraryFragment>::@class::C::@setter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @29
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_setter_invalid_named_parameter() async {
+    var library = await buildLibrary('class C { void set x({a}) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            set x= @19
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalNamed default a @22
+                  reference: <testLibraryFragment>::@class::C::@setter::x::@parameter::a
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_setter_invalid_no_parameter() async {
+    var library = await buildLibrary('class C { void set x() {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            set x= @19
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: void
+''');
+  }
+
+  test_class_setter_invalid_optional_parameter() async {
+    var library = await buildLibrary('class C { void set x([a]) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            set x= @19
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default a @22
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_setter_invalid_too_many_parameters() async {
+    var library = await buildLibrary('class C { void set x(a, b) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            set x= @19
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional a @21
+                  type: dynamic
+                requiredPositional b @24
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_setter_invokesSuperSelf_getter() async {
+    var library = await buildLibrary(r'''
+class A {
+  set foo(int _) {
+    super.foo;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            set foo= @16
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @24
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_setter_invokesSuperSelf_setter() async {
+    var library = await buildLibrary(r'''
+class A {
+  set foo(int _) {
+    super.foo = 0;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            set foo= @16 invokesSuperSelf
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @24
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_setter_native() async {
+    var library = await buildLibrary('''
+class C {
+  void set x(int value) native;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            external set x= @21
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @27
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_setter_static() async {
+    var library =
+        await buildLibrary('class C { static void set x(int value) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic static x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            static set x= @26
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @32
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_class_setters() async {
+    var library = await buildLibrary('''
+class C {
+  void set x(int value) {}
+  set y(value) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+            synthetic y @-1
+              reference: <testLibraryFragment>::@class::C::@field::y
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            set x= @21
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @27
+                  type: int
+              returnType: void
+            set y= @43
+              reference: <testLibraryFragment>::@class::C::@setter::y
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @45
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_class_supertype() async {
+    var library = await buildLibrary('''
+class A {}
+class B extends A {}
+''');
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+        class B @17
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+''');
+  }
+
+  test_class_supertype_dynamic() async {
+    var library = await buildLibrary('''
+class A extends dynamic {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_class_supertype_extensionType() async {
+    var library = await buildLibrary('''
+extension type A(int it) {}
+class B extends A {}
+''');
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @34
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_class_supertype_genericClass() async {
+    var library = await buildLibrary('''
+class C extends D<int, double> {}
+class D<T1, T2> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D<int, double>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::D::@constructor::new
+                substitution: {T1: int, T2: double}
+        class D @40
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @42
+              defaultType: dynamic
+            covariant T2 @46
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+''');
+  }
+
+  test_class_supertype_genericClass_tooManyArguments() async {
+    var library = await buildLibrary('''
+class A<T> {}
+class B extends A<int, String> {}
+''');
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+        class B @20
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A<dynamic>
+''');
+  }
+
+  test_class_supertype_typeArguments_self() async {
+    var library = await buildLibrary('''
+class A<T> {}
+class B extends A<B> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @20
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A<B>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: B}
+''');
+  }
+
+  test_class_supertype_typeParameter() async {
+    var library = await buildLibrary('''
+class A<T> extends T<int> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_class_supertype_unresolved() async {
+    var library = await buildLibrary('class C extends D {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_typeParameters() async {
+    var library = await buildLibrary('class C<T, U> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_typeParameters_bound() async {
+    var library = await buildLibrary('''
+class C<T extends Object, U extends D> {}
+class D {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: Object
+              defaultType: Object
+            covariant U @26
+              bound: D
+              defaultType: D
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @48
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+''');
+  }
+
+  test_class_typeParameters_cycle_1of1() async {
+    var library = await buildLibrary('class C<T extends T> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: dynamic
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_typeParameters_cycle_2of3() async {
+    var library = await buildLibrary(r'''
+class C<T extends V, U, V extends T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: dynamic
+              defaultType: dynamic
+            covariant U @21
+              defaultType: dynamic
+            covariant V @24
+              bound: dynamic
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_typeParameters_defaultType_cycle_genericFunctionType() async {
+    var library = await buildLibrary(r'''
+class A<T extends void Function(A)> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: void Function(A<dynamic>)
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_class_typeParameters_defaultType_cycle_genericFunctionType2() async {
+    var library = await buildLibrary(r'''
+class C<T extends void Function<U extends C>()> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: void Function<U extends C<dynamic>>()
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_typeParameters_defaultType_functionTypeAlias_contravariant() async {
+    var library = await buildLibrary(r'''
+typedef F<X> = void Function(X);
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class A @40
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @42
+              bound: void Function(X)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    X
+              defaultType: void Function(Never)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    Never
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          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() async {
+    var library = await buildLibrary(r'''
+typedef F<X> = X Function();
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class A @36
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @38
+              bound: X Function()
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    X
+              defaultType: dynamic Function()
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            covariant X @10
+              defaultType: dynamic
+          aliasedType: X Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: X
+''');
+  }
+
+  test_class_typeParameters_defaultType_functionTypeAlias_invariant() async {
+    var library = await buildLibrary(r'''
+typedef F<X> = X Function(X);
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class A @37
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @39
+              bound: X Function(X)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    X
+              defaultType: dynamic Function(dynamic)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          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_legacy() async {
+    var library = await buildLibrary(r'''
+typedef F<X> = X Function(X);
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class A @37
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @39
+              bound: X Function(X)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    X
+              defaultType: dynamic Function(dynamic)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          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() async {
+    var library = await buildLibrary(r'''
+class A<X extends X Function(X)> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @8
+              bound: X Function(X)
+              defaultType: dynamic Function(Never)
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_contravariant() async {
+    var library = await buildLibrary(r'''
+class A<X extends void Function(X)> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @8
+              bound: void Function(X)
+              defaultType: void Function(Never)
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_covariant() async {
+    var library = await buildLibrary(r'''
+class A<X extends X Function()> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @8
+              bound: X Function()
+              defaultType: dynamic Function()
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_covariant_legacy() async {
+    var library = await buildLibrary(r'''
+class A<X extends X Function()> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @8
+              bound: X Function()
+              defaultType: dynamic Function()
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_class_typeParameters_defaultType_typeAlias_interface_contravariant() async {
+    var library = await buildLibrary(r'''
+typedef A<X> = List<void Function(X)>;
+
+class B<X extends A<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class B @46
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @48
+              bound: List<void Function(X)>
+                alias: <testLibraryFragment>::@typeAlias::A
+                  typeArguments
+                    X
+              defaultType: List<void Function(Never)>
+                alias: <testLibraryFragment>::@typeAlias::A
+                  typeArguments
+                    Never
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            contravariant X @10
+              defaultType: dynamic
+          aliasedType: List<void Function(X)>
+''');
+  }
+
+  test_class_typeParameters_defaultType_typeAlias_interface_covariant() async {
+    var library = await buildLibrary(r'''
+typedef A<X> = Map<X, int>;
+
+class B<X extends A<X>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class B @35
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @37
+              bound: Map<X, int>
+                alias: <testLibraryFragment>::@typeAlias::A
+                  typeArguments
+                    X
+              defaultType: Map<dynamic, int>
+                alias: <testLibraryFragment>::@typeAlias::A
+                  typeArguments
+                    dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            covariant X @10
+              defaultType: dynamic
+          aliasedType: Map<X, int>
+''');
+  }
+
+  test_class_typeParameters_f_bound_complex() async {
+    var library = await buildLibrary('class C<T extends List<U>, U> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: List<U>
+              defaultType: List<dynamic>
+            covariant U @27
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_typeParameters_f_bound_simple() async {
+    var library = await buildLibrary('class C<T extends U, U> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: U
+              defaultType: dynamic
+            covariant U @21
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_typeParameters_variance_contravariant() async {
+    var library = await buildLibrary('class C<in T> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            contravariant T @11
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_typeParameters_variance_covariant() async {
+    var library = await buildLibrary('class C<out T> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @12
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_typeParameters_variance_invariant() async {
+    var library = await buildLibrary('class C<inout T> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            invariant T @14
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_class_typeParameters_variance_multiple() async {
+    var library = await buildLibrary('class C<inout T, in U, out V> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            invariant T @14
+              defaultType: dynamic
+            contravariant U @20
+              defaultType: dynamic
+            covariant V @27
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_classAlias() async {
+    var library = await buildLibrary('''
+class C = D with E, F, G;
+class D {}
+class E {}
+class F {}
+class G {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          mixins
+            E
+            F
+            G
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @32
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @43
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+        class F @54
+          reference: <testLibraryFragment>::@class::F
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::F::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::F
+        class G @65
+          reference: <testLibraryFragment>::@class::G
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::G::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::G
+''');
+  }
+
+  test_classAlias_abstract() async {
+    var library = await buildLibrary('''
+abstract class C = D with E;
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class alias C @15
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          mixins
+            E
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @35
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @46
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+''');
+  }
+
+  test_classAlias_base() async {
+    var library = await buildLibrary('''
+base class C = Object with M;
+mixin M {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        base class alias C @11
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+      mixins
+        mixin M @36
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_classAlias_constructors_default() async {
+    var library = await buildLibrary('''
+class A {}
+mixin class M {}
+class X = A with M;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        mixin class M @23
+          reference: <testLibraryFragment>::@class::M
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::M::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::M
+        class alias X @34
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          mixins
+            M
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_classAlias_constructors_dependencies() async {
+    var library = await buildLibrary('''
+class A {
+  A(int i);
+}
+mixin class M1 {}
+mixin class M2 {}
+
+class C2 = C1 with M2;
+class C1 = A with M1;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional i @18
+                  type: int
+        mixin class M1 @36
+          reference: <testLibraryFragment>::@class::M1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::M1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::M1
+        mixin class M2 @54
+          reference: <testLibraryFragment>::@class::M2
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::M2::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::M2
+        class alias C2 @67
+          reference: <testLibraryFragment>::@class::C2
+          enclosingElement: <testLibraryFragment>
+          supertype: C1
+          mixins
+            M2
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C2::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C2
+              parameters
+                requiredPositional i @-1
+                  type: int
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: i @-1
+                        staticElement: <testLibraryFragment>::@class::C2::@constructor::new::@parameter::i
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::C1::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::C1::@constructor::new
+        class alias C1 @90
+          reference: <testLibraryFragment>::@class::C1
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          mixins
+            M1
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C1
+              parameters
+                requiredPositional i @-1
+                  type: int
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: i @-1
+                        staticElement: <testLibraryFragment>::@class::C1::@constructor::new::@parameter::i
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_classAlias_constructors_optionalParameters() async {
+    var library = await buildLibrary('''
+class A {
+  A.c1(int a);
+  A.c2(int a, [int? b, int c = 0]);
+  A.c3(int a, {int? b, int c = 0});
+}
+
+mixin M {}
+
+class C = A with M;
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            c1 @14
+              reference: <testLibraryFragment>::@class::A::@constructor::c1
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 13
+              nameEnd: 16
+              parameters
+                requiredPositional a @21
+                  type: int
+            c2 @29
+              reference: <testLibraryFragment>::@class::A::@constructor::c2
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 28
+              nameEnd: 31
+              parameters
+                requiredPositional a @36
+                  type: int
+                optionalPositional default b @45
+                  type: int?
+                optionalPositional default c @52
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 0 @56
+                      staticType: int
+            c3 @65
+              reference: <testLibraryFragment>::@class::A::@constructor::c3
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 64
+              nameEnd: 67
+              parameters
+                requiredPositional a @72
+                  type: int
+                optionalNamed default b @81
+                  reference: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::b
+                  type: int?
+                optionalNamed default c @88
+                  reference: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::c
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 0 @92
+                      staticType: int
+        class alias C @118
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          mixins
+            M
+          constructors
+            synthetic c1 @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::c1
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional a @-1
+                  type: int
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: c1 @-1
+                    staticElement: <testLibraryFragment>::@class::A::@constructor::c1
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: a @-1
+                        staticElement: <testLibraryFragment>::@class::C::@constructor::c1::@parameter::a
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::c1
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::c1
+            synthetic c2 @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::c2
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional a @-1
+                  type: int
+                optionalPositional default b @-1
+                  type: int?
+                optionalPositional default c @-1
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 0 @56
+                      staticType: int
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: c2 @-1
+                    staticElement: <testLibraryFragment>::@class::A::@constructor::c2
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: a @-1
+                        staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::a
+                        staticType: int
+                      SimpleIdentifier
+                        token: b @-1
+                        staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::b
+                        staticType: int?
+                      SimpleIdentifier
+                        token: c @-1
+                        staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::c
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::c2
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::c2
+            synthetic c3 @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::c3
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional a @-1
+                  type: int
+                optionalNamed default b @-1
+                  reference: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b
+                  type: int?
+                optionalNamed default c @-1
+                  reference: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 0 @92
+                      staticType: int
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: c3 @-1
+                    staticElement: <testLibraryFragment>::@class::A::@constructor::c3
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: a @-1
+                        staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::a
+                        staticType: int
+                      SimpleIdentifier
+                        token: b @-1
+                        staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b
+                        staticType: int?
+                      SimpleIdentifier
+                        token: c @-1
+                        staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::c3
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::c3
+      mixins
+        mixin M @106
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_classAlias_constructors_requiredParameters() async {
+    var library = await buildLibrary('''
+class A<T extends num> {
+  A(T x, T y);
+}
+
+mixin M {}
+
+class B<E extends num> = A<E> with M;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: num
+              defaultType: num
+          constructors
+            @27
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional x @31
+                  type: T
+                requiredPositional y @36
+                  type: T
+        class alias B @61
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant E @63
+              bound: num
+              defaultType: num
+          supertype: A<E>
+          mixins
+            M
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional x @-1
+                  type: E
+                requiredPositional y @-1
+                  type: E
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: x @-1
+                        staticElement: <testLibraryFragment>::@class::B::@constructor::new::@parameter::x
+                        staticType: E
+                      SimpleIdentifier
+                        token: y @-1
+                        staticElement: <testLibraryFragment>::@class::B::@constructor::new::@parameter::y
+                        staticType: E
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: E}
+      mixins
+        mixin M @49
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_classAlias_documented() async {
+    var library = await buildLibrary('''
+/**
+ * Docs
+ */
+class C = D with E;
+
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * Docs\n */
+          supertype: D
+          mixins
+            E
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @43
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @54
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+''');
+  }
+
+  test_classAlias_documented_tripleSlash() async {
+    var library = await buildLibrary('''
+/// aaa
+/// b
+/// cc
+class C = D with E;
+
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias C @27
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// aaa\n/// b\n/// cc
+          supertype: D
+          mixins
+            E
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @48
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @59
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+''');
+  }
+
+  test_classAlias_documented_withLeadingNonDocumentation() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+class C = D with E;
+
+class D {}
+class E {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias C @66
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * Docs\n */
+          supertype: D
+          mixins
+            E
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @87
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @98
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+''');
+  }
+
+  test_classAlias_final() async {
+    var library = await buildLibrary('''
+final class C = Object with M;
+mixin M {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        final class alias C @12
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+      mixins
+        mixin M @37
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_classAlias_generic() async {
+    var library = await buildLibrary('''
+class Z = A with B<int>, C<double>;
+class A {}
+class B<B1> {}
+class C<C1> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias Z @6
+          reference: <testLibraryFragment>::@class::Z
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          mixins
+            B<int>
+            C<double>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::Z::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::Z
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+        class A @42
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @53
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant B1 @55
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @68
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant C1 @70
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_classAlias_interface() async {
+    var library = await buildLibrary('''
+interface class C = Object with M;
+mixin M {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        interface class alias C @16
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+      mixins
+        mixin M @41
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_classAlias_invalid_extendsEnum() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+enum E { v }
+mixin M {}
+''');
+
+    var library = await buildLibrary('''
+import 'a.dart';
+class A = E with M;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class alias A @23
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+''');
+  }
+
+  test_classAlias_invalid_extendsMixin() async {
+    var library = await buildLibrary('''
+mixin M1 {}
+mixin M2 {}
+class A = M1 with M2;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias A @30
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M2
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+      mixins
+        mixin M1 @6
+          reference: <testLibraryFragment>::@mixin::M1
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+        mixin M2 @18
+          reference: <testLibraryFragment>::@mixin::M2
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_classAlias_mixin_class() async {
+    var library = await buildLibrary('''
+mixin class C = Object with M;
+mixin M {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        mixin class alias C @12
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+      mixins
+        mixin M @37
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_classAlias_notSimplyBounded_self() async {
+    var library = await buildLibrary('''
+class C<T extends C> = D with E;
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class alias C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: C<dynamic>
+              defaultType: dynamic
+          supertype: D
+          mixins
+            E
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @39
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @50
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+''');
+  }
+
+  test_classAlias_notSimplyBounded_simple_no_type_parameter_bound() async {
+    // If no bounds are specified, then the class is simply bounded by syntax
+    // alone, so there is no reason to assign it a slot.
+    var library = await buildLibrary('''
+class C<T> = D with E;
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          supertype: D
+          mixins
+            E
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @29
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @40
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+''');
+  }
+
+  test_classAlias_notSimplyBounded_simple_non_generic() async {
+    // If no type parameters are specified, then the class is simply bounded, so
+    // there is no reason to assign it a slot.
+    var library = await buildLibrary('''
+class C = D with E;
+class D {}
+class E {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          mixins
+            E
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @26
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @37
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+''');
+  }
+
+  test_classAlias_sealed() async {
+    var library = await buildLibrary('''
+sealed class C = Object with M;
+mixin M {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract sealed class alias C @13
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+      mixins
+        mixin M @38
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_classAlias_with_const_constructors() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class Base {
+  const Base._priv();
+  const Base();
+  const Base.named();
+}
+''');
+    var library = await buildLibrary('''
+import "a.dart";
+class M {}
+class MixinApp = Base with M;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class M @23
+          reference: <testLibraryFragment>::@class::M
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::M::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::M
+        class alias MixinApp @34
+          reference: <testLibraryFragment>::@class::MixinApp
+          enclosingElement: <testLibraryFragment>
+          supertype: Base
+          mixins
+            M
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::MixinApp::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::MixinApp
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::new
+              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::new
+            synthetic const named @-1
+              reference: <testLibraryFragment>::@class::MixinApp::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::MixinApp
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: named @-1
+                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::named
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::named
+              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::named
+''');
+  }
+
+  test_classAlias_with_forwarding_constructors() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class Base {
+  bool x = true;
+  Base._priv();
+  Base();
+  Base.noArgs();
+  Base.requiredArg(x);
+  Base.positionalArg([bool x = true]);
+  Base.positionalArg2([this.x = true]);
+  Base.namedArg({int x = 42});
+  Base.namedArg2({this.x = true});
+  factory Base.fact() => Base();
+  factory Base.fact2() = Base.noArgs;
+}
+''');
+    var library = await buildLibrary('''
+import "a.dart";
+class M {}
+class MixinApp = Base with M;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class M @23
+          reference: <testLibraryFragment>::@class::M
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::M::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::M
+        class alias MixinApp @34
+          reference: <testLibraryFragment>::@class::MixinApp
+          enclosingElement: <testLibraryFragment>
+          supertype: Base
+          mixins
+            M
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::MixinApp::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::MixinApp
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::new
+              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::new
+            synthetic noArgs @-1
+              reference: <testLibraryFragment>::@class::MixinApp::@constructor::noArgs
+              enclosingElement: <testLibraryFragment>::@class::MixinApp
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: noArgs @-1
+                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
+              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
+            synthetic requiredArg @-1
+              reference: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg
+              enclosingElement: <testLibraryFragment>::@class::MixinApp
+              parameters
+                requiredPositional x @-1
+                  type: dynamic
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: requiredArg @-1
+                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: x @-1
+                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg::@parameter::x
+                        staticType: dynamic
+                    rightParenthesis: ) @0
+                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
+              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
+            synthetic positionalArg @-1
+              reference: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg
+              enclosingElement: <testLibraryFragment>::@class::MixinApp
+              parameters
+                optionalPositional default x @-1
+                  type: bool
+                  constantInitializer
+                    BooleanLiteral
+                      literal: true @127
+                      staticType: bool
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: positionalArg @-1
+                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: x @-1
+                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg::@parameter::x
+                        staticType: bool
+                    rightParenthesis: ) @0
+                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
+              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
+            synthetic positionalArg2 @-1
+              reference: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2
+              enclosingElement: <testLibraryFragment>::@class::MixinApp
+              parameters
+                optionalPositional default final x @-1
+                  type: bool
+                  constantInitializer
+                    BooleanLiteral
+                      literal: true @167
+                      staticType: bool
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: positionalArg2 @-1
+                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: x @-1
+                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2::@parameter::x
+                        staticType: bool
+                    rightParenthesis: ) @0
+                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
+              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
+            synthetic namedArg @-1
+              reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg
+              enclosingElement: <testLibraryFragment>::@class::MixinApp
+              parameters
+                optionalNamed default x @-1
+                  reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 42 @200
+                      staticType: int
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: namedArg @-1
+                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: x @-1
+                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
+              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
+            synthetic namedArg2 @-1
+              reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2
+              enclosingElement: <testLibraryFragment>::@class::MixinApp
+              parameters
+                optionalNamed default final x @-1
+                  reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x
+                  type: bool
+                  constantInitializer
+                    BooleanLiteral
+                      literal: true @233
+                      staticType: bool
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: namedArg2 @-1
+                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: x @-1
+                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x
+                        staticType: bool
+                    rightParenthesis: ) @0
+                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
+              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
+''');
+  }
+
+  test_classAlias_with_forwarding_constructors_type_substitution() async {
+    var library = await buildLibrary('''
+class Base<T> {
+  Base.ctor(T t, List<T> l);
+}
+class M {}
+class MixinApp = Base with M;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class Base @6
+          reference: <testLibraryFragment>::@class::Base
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @11
+              defaultType: dynamic
+          constructors
+            ctor @23
+              reference: <testLibraryFragment>::@class::Base::@constructor::ctor
+              enclosingElement: <testLibraryFragment>::@class::Base
+              periodOffset: 22
+              nameEnd: 27
+              parameters
+                requiredPositional t @30
+                  type: T
+                requiredPositional l @41
+                  type: List<T>
+        class M @53
+          reference: <testLibraryFragment>::@class::M
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::M::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::M
+        class alias MixinApp @64
+          reference: <testLibraryFragment>::@class::MixinApp
+          enclosingElement: <testLibraryFragment>
+          supertype: Base<dynamic>
+          mixins
+            M
+          constructors
+            synthetic ctor @-1
+              reference: <testLibraryFragment>::@class::MixinApp::@constructor::ctor
+              enclosingElement: <testLibraryFragment>::@class::MixinApp
+              parameters
+                requiredPositional t @-1
+                  type: dynamic
+                requiredPositional l @-1
+                  type: List<dynamic>
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: ctor @-1
+                    staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: t @-1
+                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t
+                        staticType: dynamic
+                      SimpleIdentifier
+                        token: l @-1
+                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l
+                        staticType: List<dynamic>
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::Base::@constructor::ctor
+                substitution: {T: dynamic}
+''');
+  }
+
+  test_classAlias_with_forwarding_constructors_type_substitution_complex() async {
+    var library = await buildLibrary('''
+class Base<T> {
+  Base.ctor(T t, List<T> l);
+}
+class M {}
+class MixinApp<U> = Base<List<U>> with M;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class Base @6
+          reference: <testLibraryFragment>::@class::Base
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @11
+              defaultType: dynamic
+          constructors
+            ctor @23
+              reference: <testLibraryFragment>::@class::Base::@constructor::ctor
+              enclosingElement: <testLibraryFragment>::@class::Base
+              periodOffset: 22
+              nameEnd: 27
+              parameters
+                requiredPositional t @30
+                  type: T
+                requiredPositional l @41
+                  type: List<T>
+        class M @53
+          reference: <testLibraryFragment>::@class::M
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::M::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::M
+        class alias MixinApp @64
+          reference: <testLibraryFragment>::@class::MixinApp
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U @73
+              defaultType: dynamic
+          supertype: Base<List<U>>
+          mixins
+            M
+          constructors
+            synthetic ctor @-1
+              reference: <testLibraryFragment>::@class::MixinApp::@constructor::ctor
+              enclosingElement: <testLibraryFragment>::@class::MixinApp
+              parameters
+                requiredPositional t @-1
+                  type: List<U>
+                requiredPositional l @-1
+                  type: List<List<U>>
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: ctor @-1
+                    staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: t @-1
+                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t
+                        staticType: List<U>
+                      SimpleIdentifier
+                        token: l @-1
+                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l
+                        staticType: List<List<U>>
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::Base::@constructor::ctor
+                substitution: {T: List<U>}
+''');
+  }
+
+  test_classAlias_with_mixin_members() async {
+    var library = await buildLibrary('''
+class C = D with E;
+class D {}
+class E {
+  int get a => null;
+  void set b(int i) {}
+  void f() {}
+  int x;
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          mixins
+            E
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @26
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @37
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @105
+              reference: <testLibraryFragment>::@class::E::@field::x
+              enclosingElement: <testLibraryFragment>::@class::E
+              type: int
+            synthetic a @-1
+              reference: <testLibraryFragment>::@class::E::@field::a
+              enclosingElement: <testLibraryFragment>::@class::E
+              type: int
+            synthetic b @-1
+              reference: <testLibraryFragment>::@class::E::@field::b
+              enclosingElement: <testLibraryFragment>::@class::E
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::E::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::E
+              returnType: int
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::E::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::E
+              parameters
+                requiredPositional _x @-1
+                  type: int
+              returnType: void
+            get a @51
+              reference: <testLibraryFragment>::@class::E::@getter::a
+              enclosingElement: <testLibraryFragment>::@class::E
+              returnType: int
+            set b= @73
+              reference: <testLibraryFragment>::@class::E::@setter::b
+              enclosingElement: <testLibraryFragment>::@class::E
+              parameters
+                requiredPositional i @79
+                  type: int
+              returnType: void
+          methods
+            f @92
+              reference: <testLibraryFragment>::@class::E::@method::f
+              enclosingElement: <testLibraryFragment>::@class::E
+              returnType: void
+''');
+  }
+
+  test_classes() async {
+    var library = await buildLibrary('class C {} class D {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @17
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+''');
+  }
+
+  test_implicitConstructor_named_const() async {
+    var library = await buildLibrary('''
+class C {
+  final Object x;
+  const C.named(this.x);
+}
+const x = C.named(42);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @25
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: Object
+          constructors
+            const named @38
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 37
+              nameEnd: 43
+              parameters
+                requiredPositional final this.x @49
+                  type: Object
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: Object
+      topLevelVariables
+        static const x @61
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @65
+                  element: <testLibraryFragment>::@class::C
+                  type: C
+                period: . @66
+                name: SimpleIdentifier
+                  token: named @67
+                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
+                  staticType: null
+                staticElement: <testLibraryFragment>::@class::C::@constructor::named
+              argumentList: ArgumentList
+                leftParenthesis: ( @72
+                arguments
+                  IntegerLiteral
+                    literal: 42 @73
+                    staticType: int
+                rightParenthesis: ) @75
+              staticType: C
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+''');
+  }
+
+  test_invalid_setterParameter_fieldFormalParameter() async {
+    var library = await buildLibrary('''
+class C {
+  int foo;
+  void set bar(this.foo) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            foo @16
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+            synthetic bar @-1
+              reference: <testLibraryFragment>::@class::C::@field::bar
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::C::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+            set bar= @32
+              reference: <testLibraryFragment>::@class::C::@setter::bar
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.foo @41
+                  type: dynamic
+                  field: <null>
+              returnType: void
+''');
+  }
+
+  test_invalid_setterParameter_fieldFormalParameter_self() async {
+    var library = await buildLibrary('''
+class C {
+  set x(this.x) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            set x= @16
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @23
+                  type: dynamic
+                  field: <null>
+              returnType: void
+''');
+  }
+
+  test_unused_type_parameter() async {
+    var library = await buildLibrary('''
+class C<T> {
+  void f() {}
+}
+C<int> c;
+var v = c.f;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @20
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: void
+      topLevelVariables
+        static c @36
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C<int>
+        static v @43
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: void Function()
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C<int>
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C<int>
+          returnType: void
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: void Function()
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: void Function()
+          returnType: void
+''');
+  }
+}
+
+abstract class ClassElementTest_augmentation extends ElementsBaseTest {
+  test_add_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+class A {
+  void foo() {}
+}
+
+augment class A {
+  void bar() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class A @36
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          methods
+            foo @47
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
+              returnType: void
+          augmented
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
+              <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo
+        augment class A @73
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          methods
+            bar @84
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmentation_constField_hasConstConstructor() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  static const int foo = 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  const A();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            const @43
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            static const foo @66
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @72
+                  staticType: int
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+''');
+  }
+
+  test_augmentation_constField_noConstConstructor() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  static const int foo = 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            static const foo @66
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @72
+                  staticType: int
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+''');
+  }
+
+  test_augmentation_finalField_hasConstConstructor() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  final int foo = 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  const A();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            const @43
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            final foo @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @65
+                  staticType: int
+          accessors
+            synthetic get foo @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+''');
+  }
+
+  test_augmentation_finalField_noConstConstructor() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  final int foo = 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            final foo @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+          accessors
+            synthetic get foo @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+''');
+  }
+
+  test_augmentationTarget() async {
+    newFile('$testPackageLibPath/a1.dart', r'''
+augment library 'test.dart';
+import augment 'a11.dart';
+import augment 'a12.dart';
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/a11.dart', r'''
+augment library 'a1.dart';
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/a12.dart', r'''
+augment library 'a1.dart';
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/a2.dart', r'''
+augment library 'test.dart';
+import augment 'a21.dart';
+import augment 'a22.dart';
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/a21.dart', r'''
+augment library 'a2.dart';
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/a22.dart', r'''
+augment library 'a2.dart';
+augment class A {}
+''');
+
+    configuration.withExportScope = true;
+    var library = await buildLibrary(r'''
+import augment 'a1.dart';
+import augment 'a2.dart';
+class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a1.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a1.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a1.dart
+      augmentationImports
+        package:test/a11.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
+          reference: <testLibrary>::@augmentation::package:test/a11.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a11.dart
+        package:test/a12.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
+          reference: <testLibrary>::@augmentation::package:test/a12.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a12.dart
+    package:test/a2.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a2.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a2.dart
+      augmentationImports
+        package:test/a21.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
+          reference: <testLibrary>::@augmentation::package:test/a21.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a21.dart
+        package:test/a22.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
+          reference: <testLibrary>::@augmentation::package:test/a22.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a22.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @58
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+    <testLibrary>::@fragment::package:test/a1.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @97
+          reference: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a1.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          augmentation: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
+    <testLibrary>::@fragment::package:test/a11.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a11.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
+      classes
+        augment class A @41
+          reference: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a11.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
+          augmentation: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
+    <testLibrary>::@fragment::package:test/a12.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a12.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
+      classes
+        augment class A @41
+          reference: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a12.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
+          augmentation: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
+    <testLibrary>::@fragment::package:test/a2.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @97
+          reference: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a2.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
+          augmentation: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
+    <testLibrary>::@fragment::package:test/a21.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a21.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
+      classes
+        augment class A @41
+          reference: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a21.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
+          augmentation: <testLibrary>::@fragment::package:test/a22.dart::@classAugmentation::A
+    <testLibrary>::@fragment::package:test/a22.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a22.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
+      classes
+        augment class A @41
+          reference: <testLibrary>::@fragment::package:test/a22.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a22.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
+  exportedReferences
+    declared <testLibraryFragment>::@class::A
+  exportNamespace
+    A: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_augmentationTarget_augmentationThenDeclaration() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment class A {
+  void foo1() {}
+}
+
+class A {
+  void foo2() {}
+}
+
+augment class A {
+  void foo3() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
+          methods
+            foo1 @55
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
+              returnType: void
+        class A @74
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          methods
+            foo2 @85
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
+              returnType: void
+          augmented
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
+        augment class A @112
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          methods
+            foo3 @123
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
+              returnType: void
+''');
+  }
+
+  test_augmentationTarget_no2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment class A {
+  void foo1() {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment class A {
+  void foo2() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class B {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @31
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @68
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          methods
+            foo1 @79
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+          augmented
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo1
+              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@method::foo2
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        augment class A @40
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          methods
+            foo2 @51
+              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@method::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmented_constructor_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment A.foo();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int foo = 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo @41
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+              <testLibraryFragment>::@class::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            augment foo @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              periodOffset: 58
+              nameEnd: 62
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
+''');
+  }
+
+  test_augmented_constructor_augment_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment A.foo();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int get foo => 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          accessors
+            get foo @45
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            augment foo @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              periodOffset: 58
+              nameEnd: 62
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
+''');
+  }
+
+  test_augmented_constructor_augment_method() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment A.foo();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+          augmented
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
+            methods
+              <testLibraryFragment>::@class::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            augment foo @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              periodOffset: 58
+              nameEnd: 62
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
+''');
+  }
+
+  test_augmented_constructor_augment_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment A.foo();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  set foo(int _) {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          accessors
+            set foo= @41
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @49
+                  type: int
+              returnType: void
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
+            accessors
+              <testLibraryFragment>::@class::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            augment foo @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              periodOffset: 58
+              nameEnd: 62
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@setter::foo
+''');
+  }
+
+  test_augmented_constructors_add_named() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  A.named();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          augmented
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            named @51
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              periodOffset: 50
+              nameEnd: 56
+''');
+  }
+
+  test_augmented_constructors_add_named_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A<T2> {
+  A.named(T2 a);
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A<T1> {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          augmented
+            constructors
+              ConstructorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
+                augmentationSubstitution: {T2: T1}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            named @55
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              periodOffset: 54
+              nameEnd: 60
+              parameters
+                requiredPositional a @64
+                  type: T2
+''');
+  }
+
+  test_augmented_constructors_add_named_hasUnnamed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  A.named();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  A();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            @37
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            named @51
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              periodOffset: 50
+              nameEnd: 56
+''');
+  }
+
+  test_augmented_constructors_add_unnamed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  A();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          augmented
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            @49
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+''');
+  }
+
+  test_augmented_constructors_add_unnamed_hasNamed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  A();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  A.named();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            named @39
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 38
+              nameEnd: 44
+          augmented
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
+              <testLibraryFragment>::@class::A::@constructor::named
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            @49
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+''');
+  }
+
+  test_augmented_constructors_add_useFieldFormal() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  A.named(this.f);
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  final int f;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            final f @47
+              reference: <testLibraryFragment>::@class::A::@field::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::A::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::f
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
+            accessors
+              <testLibraryFragment>::@class::A::@getter::f
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            named @51
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              periodOffset: 50
+              nameEnd: 56
+              parameters
+                requiredPositional final this.f @62
+                  type: int
+                  field: <testLibraryFragment>::@class::A::@field::f
+''');
+  }
+
+  test_augmented_constructors_add_useFieldInitializer() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  const A.named() : f = 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  final int f;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            final f @47
+              reference: <testLibraryFragment>::@class::A::@field::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::A::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::f
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
+            accessors
+              <testLibraryFragment>::@class::A::@getter::f
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            const named @57
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              periodOffset: 56
+              nameEnd: 62
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: f @67
+                    staticElement: <testLibraryFragment>::@class::A::@field::f
+                    staticType: null
+                  equals: = @69
+                  expression: IntegerLiteral
+                    literal: 0 @71
+                    staticType: int
+''');
+  }
+
+  test_augmented_field_augment_constructor() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  A.foo();
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            foo @39
+              reference: <testLibraryFragment>::@class::A::@constructor::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 38
+              nameEnd: 42
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
+''');
+  }
+
+  test_augmented_field_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo @41
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+              <testLibraryFragment>::@class::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int foo = 1;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+class A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @56
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo @66
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+              <testLibraryFragment>::@class::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+''');
+  }
+
+  test_augmented_field_augment_field_afterGetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo => 1;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+class A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @56
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo @66
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@class::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_afterSetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment set foo(int _) {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+class A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @56
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo @66
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          accessors
+            augment set foo= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              parameters
+                requiredPositional _ @69
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@class::A::@setter::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_augmentedInvocation() async {
+    // This is invalid code, but it should not crash.
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {;
+  augment static const int foo = augmented();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  static const int foo = 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            static const foo @54
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @60
+                  staticType: int
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            augment static const foo @75
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                AugmentedInvocation
+                  augmentedKeyword: augmented @81
+                  arguments: ArgumentList
+                    leftParenthesis: ( @90
+                    rightParenthesis: ) @91
+                  element: <null>
+                  staticType: InvalidType
+              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_differentTypes() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment double foo = 1.2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo @41
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+              <testLibraryFragment>::@class::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            augment foo @64
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: double
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_plus() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment final int foo = augmented + 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  final int foo = 0;
+  const A();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            final foo @47
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @53
+                  staticType: int
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+          constructors
+            const @64
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            augment final foo @67
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                BinaryExpression
+                  leftOperand: AugmentedExpression
+                    augmentedKeyword: augmented @73
+                    element: <testLibraryFragment>::@class::A::@field::foo
+                    staticType: int
+                  operator: + @83
+                  rightOperand: IntegerLiteral
+                    literal: 1 @85
+                    staticType: int
+                  staticElement: dart:core::<fragment>::@class::num::@method::+
+                  staticInvokeType: num Function(num)
+                  staticType: int
+              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
+''');
+  }
+
+  /// This is not allowed by the specification, but allowed syntactically,
+  /// so we need a way to handle it.
+  test_augmented_field_augment_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int get foo => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              getter: getter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo @45
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_method() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  void foo() {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            methods
+              <testLibraryFragment>::@class::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
+''');
+  }
+
+  /// This is not allowed by the specification, but allowed syntactically,
+  /// so we need a way to handle it.
+  test_augmented_field_augment_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  set foo(int _) {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            set foo= @41
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @49
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
+''');
+  }
+
+  test_augmented_fields_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  int foo2 = 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int foo1 = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo1 @41
+              reference: <testLibraryFragment>::@class::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo1 @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo1= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo1 @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo1
+              <testLibraryFragment>::@class::A::@setter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            foo2 @53
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_1
+          accessors
+            synthetic get foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+            synthetic set foo2= @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              parameters
+                requiredPositional _foo2 @-1
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_fields_add_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A<T2> {
+  T2 foo2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A<T1> {
+  T1 foo1;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo1 @44
+              reference: <testLibraryFragment>::@class::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: T1
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo1 @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: T1
+              id: getter_0
+              variable: field_0
+            synthetic set foo1= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo1 @-1
+                  type: T1
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo1
+              FieldMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
+                augmentationSubstitution: {T2: T1}
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo1
+              <testLibraryFragment>::@class::A::@setter::foo1
+              PropertyAccessorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
+                augmentationSubstitution: {T2: T1}
+              PropertyAccessorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
+                augmentationSubstitution: {T2: T1}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            foo2 @56
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: T2
+              id: field_1
+              getter: getter_1
+              setter: setter_1
+          accessors
+            synthetic get foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: T2
+              id: getter_1
+              variable: field_1
+            synthetic set foo2= @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              parameters
+                requiredPositional _foo2 @-1
+                  type: T2
+              returnType: void
+              id: setter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_fields_add_useFieldFormal() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  final int foo;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  A(this.foo);
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            @37
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional final this.foo @44
+                  type: int
+                  field: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            final foo @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+          accessors
+            synthetic get foo @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+''');
+  }
+
+  test_augmented_fields_add_useFieldInitializer() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  final int foo;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  const A() : foo = 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            const @43
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: foo @49
+                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+                    staticType: null
+                  equals: = @53
+                  expression: IntegerLiteral
+                    literal: 0 @55
+                    staticType: int
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            final foo @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+          accessors
+            synthetic get foo @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+''');
+  }
+
+  test_augmented_getter_augments_constructor() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  A.foo();
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            foo @39
+              reference: <testLibraryFragment>::@class::A::@constructor::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 38
+              nameEnd: 42
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::foo
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_0
+              variable: <null>
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
+''');
+  }
+
+  test_augmented_getter_augments_method() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  void foo() {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+            methods
+              <testLibraryFragment>::@class::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_0
+              variable: <null>
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
+''');
+  }
+
+  test_augmented_getter_augments_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  set foo(int _) {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              setter: setter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            set foo= @41
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @49
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@class::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_0
+              variable: <null>
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@setter::foo
+''');
+  }
+
+  test_augmented_getters_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  int get foo2 => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int get foo1 => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              getter: getter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo1 @45
+              reference: <testLibraryFragment>::@class::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              id: field_1
+              getter: getter_1
+          accessors
+            get foo2 @57
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_getters_add_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A<T2> {
+  T2 get foo2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A<T1> {
+  T1 get foo1;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: T1
+              id: field_0
+              getter: getter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            abstract get foo1 @48
+              reference: <testLibraryFragment>::@class::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: T1
+              id: getter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo1
+              FieldMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
+                augmentationSubstitution: {T2: T1}
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo1
+              PropertyAccessorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
+                augmentationSubstitution: {T2: T1}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: T2
+              id: field_1
+              getter: getter_1
+          accessors
+            abstract get foo2 @60
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: T2
+              id: getter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_getters_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo @41
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@class::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
+''');
+  }
+
+  test_augmented_getters_augment_field2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+class A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @56
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo @66
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@class::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_0
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+''');
+  }
+
+  test_augmented_getters_augment_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo1 => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int get foo1 => 0;
+  int get foo2 => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              getter: getter_0
+            synthetic foo2 @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo2
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_1
+              getter: getter_1
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo1 @45
+              reference: <testLibraryFragment>::@class::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo1
+            get foo2 @66
+              reference: <testLibraryFragment>::@class::A::@getter::foo2
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo1
+              <testLibraryFragment>::@class::A::@field::foo2
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo1
+              <testLibraryFragment>::@class::A::@getter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment get foo1 @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo1
+''');
+  }
+
+  test_augmented_getters_augment_getter2_oneLib_oneTop() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo => 0;
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int get foo => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              getter: getter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo @45
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::1
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::1
+            augment get foo @93
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_0
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
+''');
+  }
+
+  test_augmented_getters_augment_getter2_twoLib() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+class A {
+  int get foo => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @56
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              getter: getter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo @70
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_0
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+''');
+  }
+
+  test_augmented_getters_augment_nothing() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {}
+''');
+
+    configuration
+      ..withConstructors = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          augmented
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: int
+              id: getter_0
+              variable: <null>
+''');
+  }
+
+  test_augmented_interfaces() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A implements I2 {}
+class I2 {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A implements I1 {}
+class I1 {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          interfaces
+            I1
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            interfaces
+              I1
+              I2
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+        class I1 @56
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          interfaces
+            I2
+        class I2 @68
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+''');
+  }
+
+  test_augmented_interfaces_chain() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment class A implements I2 {}
+class I2 {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment class A implements I3 {}
+class I3 {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A implements I1 {}
+class I1 {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          interfaces
+            I1
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            interfaces
+              I1
+              I2
+              I3
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+        class I1 @56
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @68
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          interfaces
+            I2
+        class I2 @93
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        augment class A @40
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          interfaces
+            I3
+        class I3 @65
+          reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::I3
+''');
+  }
+
+  test_augmented_interfaces_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A<T2> implements I2<T2> {}
+class I2<E> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A<T> implements I1 {}
+class I1 {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          interfaces
+            I1
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            interfaces
+              I1
+              I2<T>
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+        class I1 @59
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@class::A
+          interfaces
+            I2<T2>
+        class I2 @76
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant E @79
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+''');
+  }
+
+  test_augmented_interfaces_generic_mismatch() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A<T2, T3> implements I2<T2> {}
+class I2<E> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A<T> implements I1 {}
+class I1 {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          interfaces
+            I1
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            interfaces
+              I1
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+        class I1 @59
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+            covariant T3 @49
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@class::A
+          interfaces
+            I2<T2>
+        class I2 @80
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant E @83
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+''');
+  }
+
+  test_augmented_method_augments_constructor() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  A.foo();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            foo @39
+              reference: <testLibraryFragment>::@class::A::@constructor::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 38
+              nameEnd: 42
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::foo
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          methods
+            augment foo @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
+''');
+  }
+
+  test_augmented_method_augments_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int foo = 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo @41
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+              <testLibraryFragment>::@class::A::@setter::foo
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          methods
+            augment foo @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
+''');
+  }
+
+  test_augmented_method_augments_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int get foo => 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo @45
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          methods
+            augment foo @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
+''');
+  }
+
+  test_augmented_method_augments_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  set foo(int _) {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            set foo= @41
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @49
+                  type: int
+              returnType: void
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@setter::foo
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          methods
+            augment foo @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@setter::foo
+''');
+  }
+
+  test_augmented_methods() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  void bar() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
+              <testLibraryFragment>::@class::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          methods
+            bar @54
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmented_methods_add_withDefaultValue() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  void foo([int x = 42]) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          methods
+            foo @54
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              parameters
+                optionalPositional default x @63
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 42 @67
+                      staticType: int
+              returnType: void
+''');
+  }
+
+  test_augmented_methods_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment void foo1() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  void foo1() {}
+  void foo2() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo1 @42
+              reference: <testLibraryFragment>::@class::A::@method::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo1
+            foo2 @59
+              reference: <testLibraryFragment>::@class::A::@method::foo2
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo1
+              <testLibraryFragment>::@class::A::@method::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          methods
+            augment foo1 @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo1
+''');
+  }
+
+  test_augmented_methods_augment2_oneLib_oneTop() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment void foo() {}
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::1
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          methods
+            augment foo @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::1
+            augment foo @86
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
+''');
+  }
+
+  test_augmented_methods_augment2_oneLib_twoTop() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment void foo() {}
+}
+augment class A {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
+          methods
+            augment foo @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@methodAugmentation::foo
+        augment class A @87
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
+          methods
+            augment foo @106
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
+              returnType: void
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
+''');
+  }
+
+  test_augmented_methods_augment2_twoLib() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment class A {
+  augment void foo() {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment class A {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @68
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          methods
+            augment foo @87
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        augment class A @40
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          methods
+            augment foo @59
+              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+''');
+  }
+
+  test_augmented_methods_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A<T2> {
+  T2 bar() => throw 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A<T> {
+  T foo() => throw 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: T
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            methods
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
+                augmentationSubstitution: {T2: T}
+              <testLibraryFragment>::@class::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@class::A
+          methods
+            bar @56
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: T2
+''');
+  }
+
+  test_augmented_methods_generic_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A<T2> {
+  augment T2 foo() => throw 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A<T> {
+  T foo() => throw 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: T
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            methods
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+                augmentationSubstitution: {T2: T}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@class::A
+          methods
+            augment foo @64
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: T2
+              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
+''');
+  }
+
+  test_augmented_mixins() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A with M2 {}
+mixin M2 {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A with M1 {}
+mixin M1 {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          supertype: Object
+          mixins
+            M1
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            mixins
+              M1
+              M2
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+      mixins
+        mixin M1 @50
+          reference: <testLibraryFragment>::@mixin::M1
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          mixins
+            M2
+      mixins
+        mixin M2 @62
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_augmented_mixins_inferredTypeArguments() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A<T2> with M2 {}
+mixin M2<U2> on M1<U2> {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment class A<T3> with M3 {}
+mixin M3<U3> on M2<U3> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+class B<S> {}
+class A<T1> extends B<T1> with M1 {}
+mixin M1<U1> on B<U1> {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @56
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant S @58
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class A @70
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @72
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          supertype: B<T1>
+          mixins
+            M1<T1>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::B::@constructor::new
+                substitution: {S: T1}
+          augmented
+            mixins
+              M1<T1>
+              M2<T1>
+              M3<T1>
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+      mixins
+        mixin M1 @107
+          reference: <testLibraryFragment>::@mixin::M1
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U1 @110
+              defaultType: dynamic
+          superclassConstraints
+            B<U1>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@class::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          mixins
+            M2<T2>
+      mixins
+        mixin M2 @66
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant U2 @69
+              defaultType: dynamic
+          superclassConstraints
+            M1<U2>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          typeParameters
+            covariant T3 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          mixins
+            M3<T3>
+      mixins
+        mixin M3 @66
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          typeParameters
+            covariant U3 @69
+              defaultType: dynamic
+          superclassConstraints
+            M2<U3>
+''');
+  }
+
+  test_augmented_setter_augments_constructor() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment set foo(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  A.foo();
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            foo @39
+              reference: <testLibraryFragment>::@class::A::@constructor::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 38
+              nameEnd: 42
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::foo
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment set foo= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              parameters
+                requiredPositional _ @69
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: <null>
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
+''');
+  }
+
+  test_augmented_setter_augments_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment set foo(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int get foo => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              getter: getter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo @45
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment set foo= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              parameters
+                requiredPositional _ @69
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: <null>
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
+''');
+  }
+
+  test_augmented_setter_augments_method() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment set foo(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  void foo() {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+            methods
+              <testLibraryFragment>::@class::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment set foo= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              parameters
+                requiredPositional _ @69
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: <null>
+              augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
+''');
+  }
+
+  test_augmented_setters_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  set foo2(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  set foo1(int _) {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              setter: setter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            set foo1= @41
+              reference: <testLibraryFragment>::@class::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @50
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@setter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              type: int
+              id: field_1
+              setter: setter_1
+          accessors
+            set foo2= @53
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              parameters
+                requiredPositional _ @62
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_setters_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment set foo(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            foo @41
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@class::A::@getter::foo
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment set foo= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              parameters
+                requiredPositional _ @69
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@class::A::@setter::foo
+''');
+  }
+
+  test_augmented_setters_augment_nothing() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment set foo(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {}
+''');
+
+    configuration
+      ..withConstructors = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          augmented
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment set foo= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              parameters
+                requiredPositional _ @69
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: <null>
+''');
+  }
+
+  test_augmented_setters_augment_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment set foo1(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  set foo1(int _) {}
+  set foo2(int _) {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              setter: setter_0
+            synthetic foo2 @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo2
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_1
+              setter: setter_1
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            set foo1= @41
+              reference: <testLibraryFragment>::@class::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @50
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1
+            set foo2= @62
+              reference: <testLibraryFragment>::@class::A::@setter::foo2
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @71
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@class::A::@field::foo1
+              <testLibraryFragment>::@class::A::@field::foo2
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1
+              <testLibraryFragment>::@class::A::@setter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          accessors
+            augment set foo1= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              parameters
+                requiredPositional _ @70
+                  type: int
+              returnType: void
+              id: setter_2
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@class::A::@setter::foo1
+''');
+  }
+
+  /// Invalid augmentation of class with mixin does not "own" the name.
+  test_augmentedBy_mixin2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment mixin A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+
+augment mixin A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+
+class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @57
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTargetAny: <testLibraryFragment>::@class::A
+          superclassConstraints
+            Object
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @44
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTargetAny: <testLibraryFragment>::@class::A
+          superclassConstraints
+            Object
+''');
+  }
+
+  /// Invalid augmentation of class with mixin does not "own" the name.
+  /// When a valid class augmentation follows, it can use the name.
+  test_augmentedBy_mixin_class() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment mixin A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+
+class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @57
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTargetAny: <testLibraryFragment>::@class::A
+          superclassConstraints
+            Object
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_constructors_augment2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment A.named();
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment A.named();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+class A {
+  A.named();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @56
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            named @64
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 63
+              nameEnd: 69
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
+          augmented
+            constructors
+              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructorAugmentation::named
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          constructors
+            augment named @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              periodOffset: 58
+              nameEnd: 64
+              augmentationTarget: <testLibraryFragment>::@class::A::@constructor::named
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructorAugmentation::named
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            augment named @59
+              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructorAugmentation::named
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+              periodOffset: 58
+              nameEnd: 64
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
+''');
+  }
+
+  test_constructors_augment_named() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment A.named();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  A.named();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            named @39
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 38
+              nameEnd: 44
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
+          augmented
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            augment named @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              periodOffset: 58
+              nameEnd: 64
+              augmentationTarget: <testLibraryFragment>::@class::A::@constructor::named
+''');
+  }
+
+  test_constructors_augment_unnamed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {
+  augment A();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  A();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            @37
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::new
+          augmented
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+          constructors
+            augment @57
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              augmentationTarget: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_inferTypes_method_ofAugment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  int foo(String a) => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment class B {
+  foo(a) => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+import augment 'b.dart';
+
+class B extends A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class B @49
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new
+          augmented
+            constructors
+              <testLibraryFragment>::@class::B::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@method::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class B @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@class::B
+          methods
+            foo @49
+              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@method::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
+              parameters
+                requiredPositional a @53
+                  type: String
+              returnType: int
+''');
+  }
+
+  test_inferTypes_method_usingAugmentation_interface() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  int foo(String a) => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+augment class B implements A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+
+class B {
+  foo(a) => 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @32
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+          methods
+            foo @38
+              reference: <testLibraryFragment>::@class::B::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional a @42
+                  type: String
+              returnType: int
+          augmented
+            interfaces
+              A
+            constructors
+              <testLibraryFragment>::@class::B::@constructor::new
+            methods
+              <testLibraryFragment>::@class::B::@method::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      classes
+        augment class B @60
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@class::B
+          interfaces
+            A
+''');
+  }
+
+  test_inferTypes_method_usingAugmentation_mixin() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+mixin A {
+  int foo(String a) => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+augment class B with A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+
+class B {
+  foo(a) => 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @32
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+          methods
+            foo @38
+              reference: <testLibraryFragment>::@class::B::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional a @42
+                  type: String
+              returnType: int
+          augmented
+            mixins
+              A
+            constructors
+              <testLibraryFragment>::@class::B::@constructor::new
+            methods
+              <testLibraryFragment>::@class::B::@method::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      classes
+        augment class B @60
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@class::B
+          mixins
+            A
+''');
+  }
+
+  test_inferTypes_method_withAugment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  int foo(String a) => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment class B {
+  augment foo(a) => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+import augment 'b.dart';
+
+class B extends A {
+  foo(a) => 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class B @49
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new
+          methods
+            foo @65
+              reference: <testLibraryFragment>::@class::B::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional a @69
+                  type: String
+              returnType: int
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo
+          augmented
+            constructors
+              <testLibraryFragment>::@class::B::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class B @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@class::B
+          methods
+            augment foo @57
+              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
+              parameters
+                requiredPositional a @61
+                  type: String
+              returnType: int
+              augmentationTarget: <testLibraryFragment>::@class::B::@method::foo
+''');
+  }
+
+  test_methods_typeParameterCountMismatch() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A<T> {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {
+  void foo() {}
+  void bar() {}
+}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+            bar @58
+              reference: <testLibraryFragment>::@class::A::@method::bar
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+          augmented
+            methods
+              <testLibraryFragment>::@class::A::@method::bar
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+                augmentationSubstitution: {T: InvalidType}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@class::A
+          methods
+            augment foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
+''');
+  }
+
+  test_modifiers_abstract() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment abstract class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+abstract class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class A @40
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment abstract class A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_modifiers_base() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment base class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+base class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        base class A @36
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment base class A @48
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_modifiers_final() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment final class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+final class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        final class A @37
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment final class A @49
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_modifiers_interface() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment interface class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+interface class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        interface class A @41
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment interface class A @53
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_modifiers_macro() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment macro class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+macro class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        macro class A @37
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment macro class A @49
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_modifiers_mixin() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        mixin class A @37
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment mixin class A @49
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_modifiers_sealed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment sealed class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+sealed class A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract sealed class A @38
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment abstract sealed class A @50
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_notAugmented_interfaces() async {
+    var library = await buildLibrary(r'''
+class A implements I {}
+class I {}
+''');
+
+    configuration.withAugmentedWithoutAugmentation = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            I
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            interfaces
+              I
+        class I @30
+          reference: <testLibraryFragment>::@class::I
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I
+          augmented
+''');
+  }
+
+  test_notAugmented_mixins() async {
+    var library = await buildLibrary(r'''
+class A implements M {}
+mixin M {}
+''');
+
+    configuration.withAugmentedWithoutAugmentation = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            M
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            interfaces
+              M
+      mixins
+        mixin M @30
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          augmented
+            superclassConstraints
+              Object
+''');
+  }
+
+  test_notSimplyBounded_self() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A<T extends A> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A<T extends A> {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              bound: A<dynamic>
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T @45
+              bound: A<dynamic>
+              defaultType: A<dynamic>
+          augmentationTarget: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_supertype_fromAugmentation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class B<T2> extends A<T2> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A<T> {}
+class B<T1> {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @45
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @47
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::B
+          supertype: A<T1>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: T1}
+          augmented
+            constructors
+              <testLibraryFragment>::@class::B::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class B @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@class::B
+''');
+  }
+
+  test_supertype_fromAugmentation2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class C extends A {}
+''');
+
+    // `extends B` should be ignored, we already have `extends A`
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment class C extends B {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+class A {}
+class B {}
+class C {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @56
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @67
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @78
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+          augmented
+            constructors
+              <testLibraryFragment>::@class::C::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class C @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::C
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::C
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class C @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::C
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
+''');
+  }
+
+  test_typeParameters_defaultType() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A<T extends B> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A<T extends B> {}
+class B {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              bound: B
+              defaultType: B
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+        class B @55
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T @45
+              bound: B
+              defaultType: B
+          augmentationTarget: <testLibraryFragment>::@class::A
+''');
+  }
+}
+
+@reflectiveTest
+class ClassElementTest_augmentation_fromBytes
+    extends ClassElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class ClassElementTest_augmentation_keepLinking
+    extends ClassElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+@reflectiveTest
+class ClassElementTest_fromBytes extends ClassElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class ClassElementTest_keepLinking extends ClassElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+// TODO(scheglov): This is duplicate.
+extension on ElementTextConfiguration {
+  void forPromotableFields({
+    Set<String> classNames = const {},
+    Set<String> enumNames = const {},
+    Set<String> extensionTypeNames = const {},
+    Set<String> mixinNames = const {},
+    Set<String> fieldNames = const {},
+  }) {
+    filter = (e) {
+      if (e is ClassElement) {
+        return classNames.contains(e.name);
+      } else if (e is ConstructorElement) {
+        return false;
+      } else if (e is EnumElement) {
+        return enumNames.contains(e.name);
+      } else if (e is ExtensionTypeElement) {
+        return extensionTypeNames.contains(e.name);
+      } else if (e is FieldElement) {
+        return fieldNames.isEmpty || fieldNames.contains(e.name);
+      } else if (e is MixinElement) {
+        return mixinNames.contains(e.name);
+      } else if (e is PartElement) {
+        return false;
+      } else if (e is PropertyAccessorElement) {
+        return false;
+      }
+      return true;
+    };
+  }
+}
diff --git a/pkg/analyzer/test/src/summary/elements/const_test.dart b/pkg/analyzer/test/src/summary/elements/const_test.dart
new file mode 100644
index 0000000..826c349
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/const_test.dart
@@ -0,0 +1,8592 @@
+// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConstElementTest_keepLinking);
+    defineReflectiveTests(ConstElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class ConstElementTest extends ElementsBaseTest {
+  test_const_asExpression() async {
+    var library = await buildLibrary('''
+const num a = 0;
+const b = a as int;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @10
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: num
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @14
+              staticType: int
+        static const b @23
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            AsExpression
+              expression: SimpleIdentifier
+                token: a @27
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: num
+              asOperator: as @29
+              type: NamedType
+                name: int @32
+                element: dart:core::<fragment>::@class::int
+                type: int
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: num
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_assignmentExpression() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+const b = (a += 1);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @10
+              staticType: int
+        static const b @19
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ParenthesizedExpression
+              leftParenthesis: ( @23
+              expression: AssignmentExpression
+                leftHandSide: SimpleIdentifier
+                  token: a @24
+                  staticElement: <null>
+                  staticType: null
+                operator: += @26
+                rightHandSide: IntegerLiteral
+                  literal: 1 @29
+                  staticType: int
+                readElement: <testLibraryFragment>::@getter::a
+                readType: int
+                writeElement: <testLibraryFragment>::@getter::a
+                writeType: InvalidType
+                staticElement: dart:core::<fragment>::@class::num::@method::+
+                staticType: int
+              rightParenthesis: ) @30
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_cascadeExpression() async {
+    var library = await buildLibrary(r'''
+const a = 0..isEven..abs();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            CascadeExpression
+              target: IntegerLiteral
+                literal: 0 @10
+                staticType: int
+              cascadeSections
+                PropertyAccess
+                  operator: .. @11
+                  propertyName: SimpleIdentifier
+                    token: isEven @13
+                    staticElement: dart:core::<fragment>::@class::int::@getter::isEven
+                    staticType: bool
+                  staticType: bool
+                MethodInvocation
+                  operator: .. @19
+                  methodName: SimpleIdentifier
+                    token: abs @21
+                    staticElement: dart:core::<fragment>::@class::int::@method::abs
+                    staticType: int Function()
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @24
+                    rightParenthesis: ) @25
+                  staticInvokeType: int Function()
+                  staticType: int
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_classField() async {
+    var library = await buildLibrary(r'''
+class C {
+  static const int f1 = 1;
+  static const int f2 = C.f1, f3 = C.f2;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const f1 @29
+              reference: <testLibraryFragment>::@class::C::@field::f1
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 1 @34
+                  staticType: int
+            static const f2 @56
+              reference: <testLibraryFragment>::@class::C::@field::f2
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: C @61
+                    staticElement: <testLibraryFragment>::@class::C
+                    staticType: null
+                  period: . @62
+                  identifier: SimpleIdentifier
+                    token: f1 @63
+                    staticElement: <testLibraryFragment>::@class::C::@getter::f1
+                    staticType: int
+                  staticElement: <testLibraryFragment>::@class::C::@getter::f1
+                  staticType: int
+            static const f3 @67
+              reference: <testLibraryFragment>::@class::C::@field::f3
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: C @72
+                    staticElement: <testLibraryFragment>::@class::C
+                    staticType: null
+                  period: . @73
+                  identifier: SimpleIdentifier
+                    token: f2 @74
+                    staticElement: <testLibraryFragment>::@class::C::@getter::f2
+                    staticType: int
+                  staticElement: <testLibraryFragment>::@class::C::@getter::f2
+                  staticType: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get f1 @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f1
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic static get f2 @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f2
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic static get f3 @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f3
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_const_constructor_inferred_args() async {
+    var library = await buildLibrary('''
+class C<T> {
+  final T t;
+  const C(this.t);
+  const C.named(this.t);
+}
+const Object x = const C(0);
+const Object y = const C.named(0);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          fields
+            final t @23
+              reference: <testLibraryFragment>::@class::C::@field::t
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: T
+          constructors
+            const @34
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.t @41
+                  type: T
+                  field: <testLibraryFragment>::@class::C::@field::t
+            const named @55
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 54
+              nameEnd: 60
+              parameters
+                requiredPositional final this.t @66
+                  type: T
+                  field: <testLibraryFragment>::@class::C::@field::t
+          accessors
+            synthetic get t @-1
+              reference: <testLibraryFragment>::@class::C::@getter::t
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: T
+      topLevelVariables
+        static const x @85
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @89
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @95
+                  element: <testLibraryFragment>::@class::C
+                  type: C<int>
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::C::@constructor::new
+                  substitution: {T: int}
+              argumentList: ArgumentList
+                leftParenthesis: ( @96
+                arguments
+                  IntegerLiteral
+                    literal: 0 @97
+                    staticType: int
+                rightParenthesis: ) @98
+              staticType: C<int>
+        static const y @114
+          reference: <testLibraryFragment>::@topLevelVariable::y
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @118
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @124
+                  element: <testLibraryFragment>::@class::C
+                  type: C<int>
+                period: . @125
+                name: SimpleIdentifier
+                  token: named @126
+                  staticElement: ConstructorMember
+                    base: <testLibraryFragment>::@class::C::@constructor::named
+                    substitution: {T: dynamic}
+                  staticType: null
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::C::@constructor::named
+                  substitution: {T: int}
+              argumentList: ArgumentList
+                leftParenthesis: ( @131
+                arguments
+                  IntegerLiteral
+                    literal: 0 @132
+                    staticType: int
+                rightParenthesis: ) @133
+              staticType: C<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+        synthetic static get y @-1
+          reference: <testLibraryFragment>::@getter::y
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+    var x = library.definingCompilationUnit.topLevelVariables[0];
+    var xExpr = x.constantInitializer as InstanceCreationExpression;
+    var xType = xExpr.constructorName.staticElement!.returnType;
+    _assertTypeStr(
+      xType,
+      'C<int>',
+    );
+    var y = library.definingCompilationUnit.topLevelVariables[0];
+    var yExpr = y.constantInitializer as InstanceCreationExpression;
+    var yType = yExpr.constructorName.staticElement!.returnType;
+    _assertTypeStr(yType, 'C<int>');
+  }
+
+  test_const_constructorReference() async {
+    var library = await buildLibrary(r'''
+class A {
+  A.named();
+}
+const v = A.named;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            named @14
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 13
+              nameEnd: 19
+      topLevelVariables
+        static const v @31
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: A Function()
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ConstructorReference
+              constructorName: ConstructorName
+                type: NamedType
+                  name: A @35
+                  element: <testLibraryFragment>::@class::A
+                  type: null
+                period: . @36
+                name: SimpleIdentifier
+                  token: named @37
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::named
+                  staticType: null
+                staticElement: <testLibraryFragment>::@class::A::@constructor::named
+              staticType: A Function()
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: A Function()
+''');
+  }
+
+  test_const_finalField_hasConstConstructor() async {
+    var library = await buildLibrary(r'''
+class C {
+  final int f = 42;
+  const C();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final f @22
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 42 @26
+                  staticType: int
+          constructors
+            const @38
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+''');
+  }
+
+  test_const_functionExpression_typeArgumentTypes() async {
+    var library = await buildLibrary('''
+void f<T>(T a) {}
+
+const void Function(int) v = f;
+''');
+    checkElementText(library, '''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v @44
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: void Function(int)
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            FunctionReference
+              function: SimpleIdentifier
+                token: f @48
+                staticElement: <testLibraryFragment>::@function::f
+                staticType: void Function<T>(T)
+              staticType: void Function(int)
+              typeArgumentTypes
+                int
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: void Function(int)
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+          parameters
+            requiredPositional a @12
+              type: T
+          returnType: void
+''');
+  }
+
+  test_const_functionReference() async {
+    var library = await buildLibrary(r'''
+void f<T>(T a) {}
+const v = f<int>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v @24
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: void Function(int)
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            FunctionReference
+              function: SimpleIdentifier
+                token: f @28
+                staticElement: <testLibraryFragment>::@function::f
+                staticType: void Function<T>(T)
+              typeArguments: TypeArgumentList
+                leftBracket: < @29
+                arguments
+                  NamedType
+                    name: int @30
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @33
+              staticType: void Function(int)
+              typeArgumentTypes
+                int
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: void Function(int)
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+          parameters
+            requiredPositional a @12
+              type: T
+          returnType: void
+''');
+  }
+
+  test_const_indexExpression() async {
+    var library = await buildLibrary(r'''
+const a = [0];
+const b = 0;
+const c = a[b];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: List<int>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ListLiteral
+              leftBracket: [ @10
+              elements
+                IntegerLiteral
+                  literal: 0 @11
+                  staticType: int
+              rightBracket: ] @12
+              staticType: List<int>
+        static const b @21
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @25
+              staticType: int
+        static const c @34
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IndexExpression
+              target: SimpleIdentifier
+                token: a @38
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: List<int>
+              leftBracket: [ @39
+              index: SimpleIdentifier
+                token: b @40
+                staticElement: <testLibraryFragment>::@getter::b
+                staticType: int
+              rightBracket: ] @41
+              staticElement: MethodMember
+                base: dart:core::<fragment>::@class::List::@method::[]
+                substitution: {E: int}
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: List<int>
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_inference_downward_list() async {
+    var library = await buildLibrary('''
+class P<T> {
+  const P();
+}
+
+class P1<T> extends P<T> {
+  const P1();
+}
+
+class P2<T> extends P<T> {
+  const P2();
+}
+
+const List<P> values = [
+  P1(),
+  P2<int>(),
+];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class P @6
+          reference: <testLibraryFragment>::@class::P
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::P::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::P
+        class P1 @35
+          reference: <testLibraryFragment>::@class::P1
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @38
+              defaultType: dynamic
+          supertype: P<T>
+          constructors
+            const @64
+              reference: <testLibraryFragment>::@class::P1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::P1
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::P::@constructor::new
+                substitution: {T: T}
+        class P2 @79
+          reference: <testLibraryFragment>::@class::P2
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @82
+              defaultType: dynamic
+          supertype: P<T>
+          constructors
+            const @108
+              reference: <testLibraryFragment>::@class::P2::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::P2
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::P::@constructor::new
+                substitution: {T: T}
+      topLevelVariables
+        static const values @131
+          reference: <testLibraryFragment>::@topLevelVariable::values
+          enclosingElement: <testLibraryFragment>
+          type: List<P<dynamic>>
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            ListLiteral
+              leftBracket: [ @140
+              elements
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: P1 @144
+                      element: <testLibraryFragment>::@class::P1
+                      type: P1<dynamic>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@class::P1::@constructor::new
+                      substitution: {T: dynamic}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @146
+                    rightParenthesis: ) @147
+                  staticType: P1<dynamic>
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: P2 @152
+                      typeArguments: TypeArgumentList
+                        leftBracket: < @154
+                        arguments
+                          NamedType
+                            name: int @155
+                            element: dart:core::<fragment>::@class::int
+                            type: int
+                        rightBracket: > @158
+                      element: <testLibraryFragment>::@class::P2
+                      type: P2<int>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@class::P2::@constructor::new
+                      substitution: {T: int}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @159
+                    rightParenthesis: ) @160
+                  staticType: P2<int>
+              rightBracket: ] @163
+              staticType: List<P<dynamic>>
+      accessors
+        synthetic static get values @-1
+          reference: <testLibraryFragment>::@getter::values
+          enclosingElement: <testLibraryFragment>
+          returnType: List<P<dynamic>>
+''');
+  }
+
+  test_const_invalid_field_const() async {
+    var library = await buildLibrary(r'''
+class C {
+  static const f = 1 + foo();
+}
+int foo() => 42;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const f @25
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                BinaryExpression
+                  leftOperand: IntegerLiteral
+                    literal: 1 @29
+                    staticType: int
+                  operator: + @31
+                  rightOperand: MethodInvocation
+                    methodName: SimpleIdentifier
+                      token: foo @33
+                      staticElement: <testLibraryFragment>::@function::foo
+                      staticType: int Function()
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @36
+                      rightParenthesis: ) @37
+                    staticInvokeType: int Function()
+                    staticType: int
+                  staticElement: dart:core::<fragment>::@class::num::@method::+
+                  staticInvokeType: num Function(num)
+                  staticType: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get f @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+      functions
+        foo @46
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_invalid_field_final() async {
+    var library = await buildLibrary(r'''
+class C {
+  final f = 1 + foo();
+}
+int foo() => 42;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final f @18
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+      functions
+        foo @39
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_invalid_functionExpression() async {
+    var library = await buildLibrary('''
+const v = () { return 0; };
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int Function()
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: _notSerializableExpression @-1
+              staticElement: <null>
+              staticType: null
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function()
+''');
+  }
+
+  test_const_invalid_functionExpression_assertInitializer() async {
+    var library = await buildLibrary('''
+class A  {
+  const A() : assert((() => true)());
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @19
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              constantInitializers
+                AssertInitializer
+                  assertKeyword: assert @25
+                  leftParenthesis: ( @31
+                  condition: SimpleIdentifier
+                    token: _notSerializableExpression @-1
+                    staticElement: <null>
+                    staticType: null
+                  rightParenthesis: ) @46
+''');
+  }
+
+  test_const_invalid_functionExpression_assertInitializer_message() async {
+    var library = await buildLibrary('''
+class A  {
+  const A() : assert(b, () => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @19
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              constantInitializers
+                AssertInitializer
+                  assertKeyword: assert @25
+                  leftParenthesis: ( @31
+                  condition: SimpleIdentifier
+                    token: b @32
+                    staticElement: <null>
+                    staticType: InvalidType
+                  comma: , @33
+                  message: SimpleIdentifier
+                    token: _notSerializableExpression @-1
+                    staticElement: <null>
+                    staticType: null
+                  rightParenthesis: ) @42
+''');
+  }
+
+  test_const_invalid_functionExpression_constructorFieldInitializer() async {
+    var library = await buildLibrary('''
+class A {
+  final Object? foo;
+  const A() : foo = (() => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final foo @26
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: Object?
+          constructors
+            const @39
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: foo @45
+                    staticElement: <testLibraryFragment>::@class::A::@field::foo
+                    staticType: null
+                  equals: = @49
+                  expression: SimpleIdentifier
+                    token: _notSerializableExpression @-1
+                    staticElement: <null>
+                    staticType: null
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: Object?
+''');
+  }
+
+  test_const_invalid_functionExpression_nested() async {
+    var library = await buildLibrary('''
+const v = () { return 0; } + 2;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: _notSerializableExpression @-1
+              staticElement: <null>
+              staticType: null
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_const_invalid_functionExpression_redirectingConstructorInvocation() async {
+    var library = await buildLibrary('''
+class A {
+  const A(Object a, Object b);
+  const A.named() : this(0, () => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @27
+                  type: Object
+                requiredPositional b @37
+                  type: Object
+            const named @51
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 50
+              nameEnd: 56
+              constantInitializers
+                RedirectingConstructorInvocation
+                  thisKeyword: this @61
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @65
+                    arguments
+                      IntegerLiteral
+                        literal: 0 @66
+                        staticType: int
+                      SimpleIdentifier
+                        token: _notSerializableExpression @-1
+                        staticElement: <null>
+                        staticType: null
+                    rightParenthesis: ) @76
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              redirectedConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_const_invalid_functionExpression_superConstructorInvocation() async {
+    var library = await buildLibrary('''
+class A {
+  const A(Object a, Object b);
+}
+class B extends A {
+  const B() : super(0, () => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @27
+                  type: Object
+                requiredPositional b @37
+                  type: Object
+        class B @49
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            const @71
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @77
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @82
+                    arguments
+                      IntegerLiteral
+                        literal: 0 @83
+                        staticType: int
+                      SimpleIdentifier
+                        token: _notSerializableExpression @-1
+                        staticElement: <null>
+                        staticType: null
+                    rightParenthesis: ) @93
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  @SkippedTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
+  test_const_invalid_intLiteral() async {
+    var library = await buildLibrary(r'''
+const int x = 0x;
+''');
+    checkElementText(library, r'''
+const int x = 0;
+''');
+  }
+
+  test_const_invalid_methodInvocation() async {
+    var library = await buildLibrary(r'''
+const a = 'abc'.codeUnitAt(0);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            MethodInvocation
+              target: SimpleStringLiteral
+                literal: 'abc' @10
+              operator: . @15
+              methodName: SimpleIdentifier
+                token: codeUnitAt @16
+                staticElement: dart:core::<fragment>::@class::String::@method::codeUnitAt
+                staticType: int Function(int)
+              argumentList: ArgumentList
+                leftParenthesis: ( @26
+                arguments
+                  IntegerLiteral
+                    literal: 0 @27
+                    staticType: int
+                rightParenthesis: ) @28
+              staticInvokeType: int Function(int)
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_invalid_patternAssignment() async {
+    var library = await buildLibrary('''
+const v = (a,) = (0,);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: (int,)
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: _notSerializableExpression @-1
+              staticElement: <null>
+              staticType: null
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: (int,)
+''');
+  }
+
+  test_const_invalid_topLevel() async {
+    var library = await buildLibrary(r'''
+const v = 1 + foo();
+int foo() => 42;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @10
+                staticType: int
+              operator: + @12
+              rightOperand: MethodInvocation
+                methodName: SimpleIdentifier
+                  token: foo @14
+                  staticElement: <testLibraryFragment>::@function::foo
+                  staticType: int Function()
+                argumentList: ArgumentList
+                  leftParenthesis: ( @17
+                  rightParenthesis: ) @18
+                staticInvokeType: int Function()
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::+
+              staticInvokeType: num Function(num)
+              staticType: int
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+      functions
+        foo @25
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_invalid_topLevel_switchExpression() async {
+    var library = await buildLibrary(r'''
+const a = 0 + switch (true) {_ => 1};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: _notSerializableExpression @-1
+              staticElement: <null>
+              staticType: null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_invalid_typeMismatch() async {
+    var library = await buildLibrary(r'''
+const int a = 0;
+const bool b = a + 5;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @10
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @14
+              staticType: int
+        static const b @28
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            BinaryExpression
+              leftOperand: SimpleIdentifier
+                token: a @32
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: int
+              operator: + @34
+              rightOperand: IntegerLiteral
+                literal: 5 @36
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::+
+              staticInvokeType: num Function(num)
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+''');
+  }
+
+  test_const_invokeConstructor_generic_named() async {
+    var library = await buildLibrary(r'''
+class C<K, V> {
+  const C.named(K k, V v);
+}
+const V = const C<int, String>.named(1, '222');
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant K @8
+              defaultType: dynamic
+            covariant V @11
+              defaultType: dynamic
+          constructors
+            const named @26
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 25
+              nameEnd: 31
+              parameters
+                requiredPositional k @34
+                  type: K
+                requiredPositional v @39
+                  type: V
+      topLevelVariables
+        static const V @51
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C<int, String>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @55
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @61
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @62
+                    arguments
+                      NamedType
+                        name: int @63
+                        element: dart:core::<fragment>::@class::int
+                        type: int
+                      NamedType
+                        name: String @68
+                        element: dart:core::<fragment>::@class::String
+                        type: String
+                    rightBracket: > @74
+                  element: <testLibraryFragment>::@class::C
+                  type: C<int, String>
+                period: . @75
+                name: SimpleIdentifier
+                  token: named @76
+                  staticElement: ConstructorMember
+                    base: <testLibraryFragment>::@class::C::@constructor::named
+                    substitution: {K: int, V: String}
+                  staticType: null
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::C::@constructor::named
+                  substitution: {K: int, V: String}
+              argumentList: ArgumentList
+                leftParenthesis: ( @81
+                arguments
+                  IntegerLiteral
+                    literal: 1 @82
+                    staticType: int
+                  SimpleStringLiteral
+                    literal: '222' @85
+                rightParenthesis: ) @90
+              staticType: C<int, String>
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_generic_named_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C<K, V> {
+  const C.named(K k, V v);
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = const C<int, String>.named(1, '222');
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @23
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C<int, String>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @27
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @33
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @34
+                    arguments
+                      NamedType
+                        name: int @35
+                        element: dart:core::<fragment>::@class::int
+                        type: int
+                      NamedType
+                        name: String @40
+                        element: dart:core::<fragment>::@class::String
+                        type: String
+                    rightBracket: > @46
+                  element: package:test/a.dart::<fragment>::@class::C
+                  type: C<int, String>
+                period: . @47
+                name: SimpleIdentifier
+                  token: named @48
+                  staticElement: ConstructorMember
+                    base: package:test/a.dart::<fragment>::@class::C::@constructor::named
+                    substitution: {K: int, V: String}
+                  staticType: null
+                staticElement: ConstructorMember
+                  base: package:test/a.dart::<fragment>::@class::C::@constructor::named
+                  substitution: {K: int, V: String}
+              argumentList: ArgumentList
+                leftParenthesis: ( @53
+                arguments
+                  IntegerLiteral
+                    literal: 1 @54
+                    staticType: int
+                  SimpleStringLiteral
+                    literal: '222' @57
+                rightParenthesis: ) @62
+              staticType: C<int, String>
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_generic_named_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C<K, V> {
+  const C.named(K k, V v);
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C<int, String>.named(1, '222');
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @28
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C<int, String>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @32
+              constructorName: ConstructorName
+                type: NamedType
+                  importPrefix: ImportPrefixReference
+                    name: p @38
+                    period: . @39
+                    element: <testLibraryFragment>::@prefix::p
+                  name: C @40
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @41
+                    arguments
+                      NamedType
+                        name: int @42
+                        element: dart:core::<fragment>::@class::int
+                        type: int
+                      NamedType
+                        name: String @47
+                        element: dart:core::<fragment>::@class::String
+                        type: String
+                    rightBracket: > @53
+                  element: package:test/a.dart::<fragment>::@class::C
+                  type: C<int, String>
+                period: . @54
+                name: SimpleIdentifier
+                  token: named @55
+                  staticElement: ConstructorMember
+                    base: package:test/a.dart::<fragment>::@class::C::@constructor::named
+                    substitution: {K: int, V: String}
+                  staticType: null
+                staticElement: ConstructorMember
+                  base: package:test/a.dart::<fragment>::@class::C::@constructor::named
+                  substitution: {K: int, V: String}
+              argumentList: ArgumentList
+                leftParenthesis: ( @60
+                arguments
+                  IntegerLiteral
+                    literal: 1 @61
+                    staticType: int
+                  SimpleStringLiteral
+                    literal: '222' @64
+                rightParenthesis: ) @69
+              staticType: C<int, String>
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_generic_noTypeArguments() async {
+    var library = await buildLibrary(r'''
+class C<K, V> {
+  const C();
+}
+const V = const C();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant K @8
+              defaultType: dynamic
+            covariant V @11
+              defaultType: dynamic
+          constructors
+            const @24
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static const V @37
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C<dynamic, dynamic>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @41
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @47
+                  element: <testLibraryFragment>::@class::C
+                  type: C<dynamic, dynamic>
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::C::@constructor::new
+                  substitution: {K: dynamic, V: dynamic}
+              argumentList: ArgumentList
+                leftParenthesis: ( @48
+                rightParenthesis: ) @49
+              staticType: C<dynamic, dynamic>
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C<dynamic, dynamic>
+''');
+  }
+
+  test_const_invokeConstructor_generic_noTypeArguments_inferred() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  final T t;
+  const A(this.t);
+}
+const Object a = const A(0);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          fields
+            final t @23
+              reference: <testLibraryFragment>::@class::A::@field::t
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: T
+          constructors
+            const @34
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional final this.t @41
+                  type: T
+                  field: <testLibraryFragment>::@class::A::@field::t
+          accessors
+            synthetic get t @-1
+              reference: <testLibraryFragment>::@class::A::@getter::t
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: T
+      topLevelVariables
+        static const a @60
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @64
+              constructorName: ConstructorName
+                type: NamedType
+                  name: A @70
+                  element: <testLibraryFragment>::@class::A
+                  type: A<int>
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::A::@constructor::new
+                  substitution: {T: int}
+              argumentList: ArgumentList
+                leftParenthesis: ( @71
+                arguments
+                  IntegerLiteral
+                    literal: 0 @72
+                    staticType: int
+                rightParenthesis: ) @73
+              staticType: A<int>
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_invokeConstructor_generic_unnamed() async {
+    var library = await buildLibrary(r'''
+class C<K, V> {
+  const C();
+}
+const V = const C<int, String>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant K @8
+              defaultType: dynamic
+            covariant V @11
+              defaultType: dynamic
+          constructors
+            const @24
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static const V @37
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C<int, String>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @41
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @47
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @48
+                    arguments
+                      NamedType
+                        name: int @49
+                        element: dart:core::<fragment>::@class::int
+                        type: int
+                      NamedType
+                        name: String @54
+                        element: dart:core::<fragment>::@class::String
+                        type: String
+                    rightBracket: > @60
+                  element: <testLibraryFragment>::@class::C
+                  type: C<int, String>
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::C::@constructor::new
+                  substitution: {K: int, V: String}
+              argumentList: ArgumentList
+                leftParenthesis: ( @61
+                rightParenthesis: ) @62
+              staticType: C<int, String>
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_generic_unnamed_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C<K, V> {
+  const C();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = const C<int, String>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @23
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C<int, String>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @27
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @33
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @34
+                    arguments
+                      NamedType
+                        name: int @35
+                        element: dart:core::<fragment>::@class::int
+                        type: int
+                      NamedType
+                        name: String @40
+                        element: dart:core::<fragment>::@class::String
+                        type: String
+                    rightBracket: > @46
+                  element: package:test/a.dart::<fragment>::@class::C
+                  type: C<int, String>
+                staticElement: ConstructorMember
+                  base: package:test/a.dart::<fragment>::@class::C::@constructor::new
+                  substitution: {K: int, V: String}
+              argumentList: ArgumentList
+                leftParenthesis: ( @47
+                rightParenthesis: ) @48
+              staticType: C<int, String>
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_generic_unnamed_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C<K, V> {
+  const C();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C<int, String>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @28
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C<int, String>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @32
+              constructorName: ConstructorName
+                type: NamedType
+                  importPrefix: ImportPrefixReference
+                    name: p @38
+                    period: . @39
+                    element: <testLibraryFragment>::@prefix::p
+                  name: C @40
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @41
+                    arguments
+                      NamedType
+                        name: int @42
+                        element: dart:core::<fragment>::@class::int
+                        type: int
+                      NamedType
+                        name: String @47
+                        element: dart:core::<fragment>::@class::String
+                        type: String
+                    rightBracket: > @53
+                  element: package:test/a.dart::<fragment>::@class::C
+                  type: C<int, String>
+                staticElement: ConstructorMember
+                  base: package:test/a.dart::<fragment>::@class::C::@constructor::new
+                  substitution: {K: int, V: String}
+              argumentList: ArgumentList
+                leftParenthesis: ( @54
+                rightParenthesis: ) @55
+              staticType: C<int, String>
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C<int, String>
+''');
+  }
+
+  test_const_invokeConstructor_named() async {
+    var library = await buildLibrary(r'''
+class C {
+  const C.named(bool a, int b, int c, {String d, double e});
+}
+const V = const C.named(true, 1, 2, d: 'ccc', e: 3.4);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const named @20
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 19
+              nameEnd: 25
+              parameters
+                requiredPositional a @31
+                  type: bool
+                requiredPositional b @38
+                  type: int
+                requiredPositional c @45
+                  type: int
+                optionalNamed default d @56
+                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::d
+                  type: String
+                optionalNamed default e @66
+                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::e
+                  type: double
+      topLevelVariables
+        static const V @79
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @83
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @89
+                  element: <testLibraryFragment>::@class::C
+                  type: C
+                period: . @90
+                name: SimpleIdentifier
+                  token: named @91
+                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
+                  staticType: null
+                staticElement: <testLibraryFragment>::@class::C::@constructor::named
+              argumentList: ArgumentList
+                leftParenthesis: ( @96
+                arguments
+                  BooleanLiteral
+                    literal: true @97
+                    staticType: bool
+                  IntegerLiteral
+                    literal: 1 @103
+                    staticType: int
+                  IntegerLiteral
+                    literal: 2 @106
+                    staticType: int
+                  NamedExpression
+                    name: Label
+                      label: SimpleIdentifier
+                        token: d @109
+                        staticElement: <testLibraryFragment>::@class::C::@constructor::named::@parameter::d
+                        staticType: null
+                      colon: : @110
+                    expression: SimpleStringLiteral
+                      literal: 'ccc' @112
+                  NamedExpression
+                    name: Label
+                      label: SimpleIdentifier
+                        token: e @119
+                        staticElement: <testLibraryFragment>::@class::C::@constructor::named::@parameter::e
+                        staticType: null
+                      colon: : @120
+                    expression: DoubleLiteral
+                      literal: 3.4 @122
+                      staticType: double
+                rightParenthesis: ) @125
+              staticType: C
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_named_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  const C.named();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = const C.named();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @23
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @27
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @33
+                  element: package:test/a.dart::<fragment>::@class::C
+                  type: C
+                period: . @34
+                name: SimpleIdentifier
+                  token: named @35
+                  staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::named
+                  staticType: null
+                staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::named
+              argumentList: ArgumentList
+                leftParenthesis: ( @40
+                rightParenthesis: ) @41
+              staticType: C
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_named_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  const C.named();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C.named();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @28
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @32
+              constructorName: ConstructorName
+                type: NamedType
+                  importPrefix: ImportPrefixReference
+                    name: p @38
+                    period: . @39
+                    element: <testLibraryFragment>::@prefix::p
+                  name: C @40
+                  element: package:test/a.dart::<fragment>::@class::C
+                  type: C
+                period: . @41
+                name: SimpleIdentifier
+                  token: named @42
+                  staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::named
+                  staticType: null
+                staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::named
+              argumentList: ArgumentList
+                leftParenthesis: ( @47
+                rightParenthesis: ) @48
+              staticType: C
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved() async {
+    var library = await buildLibrary(r'''
+class C {}
+const V = const C.named();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static const V @17
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @21
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @27
+                  element: <testLibraryFragment>::@class::C
+                  type: C
+                period: . @28
+                name: SimpleIdentifier
+                  token: named @29
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+              argumentList: ArgumentList
+                leftParenthesis: ( @34
+                rightParenthesis: ) @35
+              staticType: C
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved2() async {
+    var library = await buildLibrary(r'''
+const V = const C.named();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const V @6
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @10
+              constructorName: ConstructorName
+                type: NamedType
+                  importPrefix: ImportPrefixReference
+                    name: C @16
+                    period: . @17
+                    element: <null>
+                  name: named @18
+                  element: <null>
+                  type: InvalidType
+                staticElement: <null>
+              argumentList: ArgumentList
+                leftParenthesis: ( @23
+                rightParenthesis: ) @24
+              staticType: InvalidType
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved3() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C.named();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @28
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @32
+              constructorName: ConstructorName
+                type: NamedType
+                  importPrefix: ImportPrefixReference
+                    name: p @38
+                    period: . @39
+                    element: <testLibraryFragment>::@prefix::p
+                  name: C @40
+                  element: package:test/a.dart::<fragment>::@class::C
+                  type: C
+                period: . @41
+                name: SimpleIdentifier
+                  token: named @42
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+              argumentList: ArgumentList
+                leftParenthesis: ( @47
+                rightParenthesis: ) @48
+              staticType: C
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved4() async {
+    addSource('$testPackageLibPath/a.dart', '');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C.named();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @28
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @32
+              constructorName: ConstructorName
+                type: NamedType
+                  importPrefix: ImportPrefixReference
+                    name: p @38
+                    period: . @39
+                    element: <testLibraryFragment>::@prefix::p
+                  name: C @40
+                  element: <null>
+                  type: InvalidType
+                period: . @41
+                name: SimpleIdentifier
+                  token: named @42
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+              argumentList: ArgumentList
+                leftParenthesis: ( @47
+                rightParenthesis: ) @48
+              staticType: InvalidType
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved5() async {
+    var library = await buildLibrary(r'''
+const V = const p.C.named();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const V @6
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @10
+              constructorName: ConstructorName
+                type: NamedType
+                  importPrefix: ImportPrefixReference
+                    name: p @16
+                    period: . @17
+                    element: <null>
+                  name: C @18
+                  element: <null>
+                  type: InvalidType
+                period: . @19
+                name: SimpleIdentifier
+                  token: named @20
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+              argumentList: ArgumentList
+                leftParenthesis: ( @25
+                rightParenthesis: ) @26
+              staticType: InvalidType
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_const_invokeConstructor_named_unresolved6() async {
+    var library = await buildLibrary(r'''
+class C<T> {}
+const V = const C.named();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static const V @20
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C<dynamic>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @24
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @30
+                  element: <testLibraryFragment>::@class::C
+                  type: C<dynamic>
+                period: . @31
+                name: SimpleIdentifier
+                  token: named @32
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+              argumentList: ArgumentList
+                leftParenthesis: ( @37
+                rightParenthesis: ) @38
+              staticType: C<dynamic>
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C<dynamic>
+''');
+  }
+
+  test_const_invokeConstructor_unnamed() async {
+    var library = await buildLibrary(r'''
+class C {
+  const C();
+}
+const V = const C();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static const V @31
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @35
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @41
+                  element: <testLibraryFragment>::@class::C
+                  type: C
+                staticElement: <testLibraryFragment>::@class::C::@constructor::new
+              argumentList: ArgumentList
+                leftParenthesis: ( @42
+                rightParenthesis: ) @43
+              staticType: C
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_unnamed_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  const C();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = const C();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @23
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @27
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @33
+                  element: package:test/a.dart::<fragment>::@class::C
+                  type: C
+                staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::new
+              argumentList: ArgumentList
+                leftParenthesis: ( @34
+                rightParenthesis: ) @35
+              staticType: C
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_unnamed_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  const C();
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @28
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @32
+              constructorName: ConstructorName
+                type: NamedType
+                  importPrefix: ImportPrefixReference
+                    name: p @38
+                    period: . @39
+                    element: <testLibraryFragment>::@prefix::p
+                  name: C @40
+                  element: package:test/a.dart::<fragment>::@class::C
+                  type: C
+                staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::new
+              argumentList: ArgumentList
+                leftParenthesis: ( @41
+                rightParenthesis: ) @42
+              staticType: C
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+''');
+  }
+
+  test_const_invokeConstructor_unnamed_unresolved() async {
+    var library = await buildLibrary(r'''
+const V = const C();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const V @6
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @10
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @16
+                  element: <null>
+                  type: InvalidType
+                staticElement: <null>
+              argumentList: ArgumentList
+                leftParenthesis: ( @17
+                rightParenthesis: ) @18
+              staticType: InvalidType
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_const_invokeConstructor_unnamed_unresolved2() async {
+    addSource('$testPackageLibPath/a.dart', '');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = const p.C();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @28
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @32
+              constructorName: ConstructorName
+                type: NamedType
+                  importPrefix: ImportPrefixReference
+                    name: p @38
+                    period: . @39
+                    element: <testLibraryFragment>::@prefix::p
+                  name: C @40
+                  element: <null>
+                  type: InvalidType
+                staticElement: <null>
+              argumentList: ArgumentList
+                leftParenthesis: ( @41
+                rightParenthesis: ) @42
+              staticType: InvalidType
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_const_invokeConstructor_unnamed_unresolved3() async {
+    var library = await buildLibrary(r'''
+const V = const p.C();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const V @6
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @10
+              constructorName: ConstructorName
+                type: NamedType
+                  importPrefix: ImportPrefixReference
+                    name: p @16
+                    period: . @17
+                    element: <null>
+                  name: C @18
+                  element: <null>
+                  type: InvalidType
+                staticElement: <null>
+              argumentList: ArgumentList
+                leftParenthesis: ( @19
+                rightParenthesis: ) @20
+              staticType: InvalidType
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_const_isExpression() async {
+    var library = await buildLibrary('''
+const a = 0;
+const b = a is int;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @10
+              staticType: int
+        static const b @19
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IsExpression
+              expression: SimpleIdentifier
+                token: a @23
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: int
+              isOperator: is @25
+              type: NamedType
+                name: int @28
+                element: dart:core::<fragment>::@class::int
+                type: int
+              staticType: bool
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+''');
+  }
+
+  test_const_length_ofClassConstField() async {
+    var library = await buildLibrary(r'''
+class C {
+  static const String F = '';
+}
+const int v = C.F.length;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const F @32
+              reference: <testLibraryFragment>::@class::C::@field::F
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: String
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                SimpleStringLiteral
+                  literal: '' @36
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get F @-1
+              reference: <testLibraryFragment>::@class::C::@getter::F
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: String
+      topLevelVariables
+        static const v @52
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            PropertyAccess
+              target: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: C @56
+                  staticElement: <testLibraryFragment>::@class::C
+                  staticType: null
+                period: . @57
+                identifier: SimpleIdentifier
+                  token: F @58
+                  staticElement: <testLibraryFragment>::@class::C::@getter::F
+                  staticType: String
+                staticElement: <testLibraryFragment>::@class::C::@getter::F
+                staticType: String
+              operator: . @59
+              propertyName: SimpleIdentifier
+                token: length @60
+                staticElement: dart:core::<fragment>::@class::String::@getter::length
+                staticType: int
+              staticType: int
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_length_ofClassConstField_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static const String F = '';
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const int v = C.F.length;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const v @27
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            PropertyAccess
+              target: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: C @31
+                  staticElement: package:test/a.dart::<fragment>::@class::C
+                  staticType: null
+                period: . @32
+                identifier: SimpleIdentifier
+                  token: F @33
+                  staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
+                  staticType: String
+                staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
+                staticType: String
+              operator: . @34
+              propertyName: SimpleIdentifier
+                token: length @35
+                staticElement: dart:core::<fragment>::@class::String::@getter::length
+                staticType: int
+              staticType: int
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_length_ofClassConstField_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static const String F = '';
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const int v = p.C.F.length;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const v @32
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            PropertyAccess
+              target: PropertyAccess
+                target: PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: p @36
+                    staticElement: <testLibraryFragment>::@prefix::p
+                    staticType: null
+                  period: . @37
+                  identifier: SimpleIdentifier
+                    token: C @38
+                    staticElement: package:test/a.dart::<fragment>::@class::C
+                    staticType: null
+                  staticElement: package:test/a.dart::<fragment>::@class::C
+                  staticType: null
+                operator: . @39
+                propertyName: SimpleIdentifier
+                  token: F @40
+                  staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
+                  staticType: String
+                staticType: String
+              operator: . @41
+              propertyName: SimpleIdentifier
+                token: length @42
+                staticElement: dart:core::<fragment>::@class::String::@getter::length
+                staticType: int
+              staticType: int
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_length_ofStringLiteral() async {
+    var library = await buildLibrary(r'''
+const v = 'abc'.length;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PropertyAccess
+              target: SimpleStringLiteral
+                literal: 'abc' @10
+              operator: . @15
+              propertyName: SimpleIdentifier
+                token: length @16
+                staticElement: dart:core::<fragment>::@class::String::@getter::length
+                staticType: int
+              staticType: int
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_length_ofTopLevelVariable() async {
+    var library = await buildLibrary(r'''
+const String S = 'abc';
+const v = S.length;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const S @13
+          reference: <testLibraryFragment>::@topLevelVariable::S
+          enclosingElement: <testLibraryFragment>
+          type: String
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            SimpleStringLiteral
+              literal: 'abc' @17
+        static const v @30
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: S @34
+                staticElement: <testLibraryFragment>::@getter::S
+                staticType: String
+              period: . @35
+              identifier: SimpleIdentifier
+                token: length @36
+                staticElement: dart:core::<fragment>::@class::String::@getter::length
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::String::@getter::length
+              staticType: int
+      accessors
+        synthetic static get S @-1
+          reference: <testLibraryFragment>::@getter::S
+          enclosingElement: <testLibraryFragment>
+          returnType: String
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_length_ofTopLevelVariable_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+const String S = 'abc';
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const v = S.length;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const v @23
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: S @27
+                staticElement: package:test/a.dart::<fragment>::@getter::S
+                staticType: String
+              period: . @28
+              identifier: SimpleIdentifier
+                token: length @29
+                staticElement: dart:core::<fragment>::@class::String::@getter::length
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::String::@getter::length
+              staticType: int
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_length_ofTopLevelVariable_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+const String S = 'abc';
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const v = p.S.length;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const v @28
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PropertyAccess
+              target: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: p @32
+                  staticElement: <testLibraryFragment>::@prefix::p
+                  staticType: null
+                period: . @33
+                identifier: SimpleIdentifier
+                  token: S @34
+                  staticElement: package:test/a.dart::<fragment>::@getter::S
+                  staticType: String
+                staticElement: package:test/a.dart::<fragment>::@getter::S
+                staticType: String
+              operator: . @35
+              propertyName: SimpleIdentifier
+                token: length @36
+                staticElement: dart:core::<fragment>::@class::String::@getter::length
+                staticType: int
+              staticType: int
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_length_staticMethod() async {
+    var library = await buildLibrary(r'''
+class C {
+  static int length() => 42;
+}
+const v = C.length;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            static length @23
+              reference: <testLibraryFragment>::@class::C::@method::length
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+      topLevelVariables
+        static const v @47
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int Function()
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: C @51
+                staticElement: <testLibraryFragment>::@class::C
+                staticType: null
+              period: . @52
+              identifier: SimpleIdentifier
+                token: length @53
+                staticElement: <testLibraryFragment>::@class::C::@method::length
+                staticType: int Function()
+              staticElement: <testLibraryFragment>::@class::C::@method::length
+              staticType: int Function()
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function()
+''');
+  }
+
+  test_const_list_if() async {
+    var library = await buildLibrary('''
+const Object x = const <int>[if (true) 1];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            ListLiteral
+              constKeyword: const @17
+              typeArguments: TypeArgumentList
+                leftBracket: < @23
+                arguments
+                  NamedType
+                    name: int @24
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @27
+              leftBracket: [ @28
+              elements
+                IfElement
+                  ifKeyword: if @29
+                  leftParenthesis: ( @32
+                  expression: BooleanLiteral
+                    literal: true @33
+                    staticType: bool
+                  rightParenthesis: ) @37
+                  thenElement: IntegerLiteral
+                    literal: 1 @39
+                    staticType: int
+              rightBracket: ] @40
+              staticType: List<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_list_if_else() async {
+    var library = await buildLibrary('''
+const Object x = const <int>[if (true) 1 else 2];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            ListLiteral
+              constKeyword: const @17
+              typeArguments: TypeArgumentList
+                leftBracket: < @23
+                arguments
+                  NamedType
+                    name: int @24
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @27
+              leftBracket: [ @28
+              elements
+                IfElement
+                  ifKeyword: if @29
+                  leftParenthesis: ( @32
+                  expression: BooleanLiteral
+                    literal: true @33
+                    staticType: bool
+                  rightParenthesis: ) @37
+                  thenElement: IntegerLiteral
+                    literal: 1 @39
+                    staticType: int
+                  elseKeyword: else @41
+                  elseElement: IntegerLiteral
+                    literal: 2 @46
+                    staticType: int
+              rightBracket: ] @47
+              staticType: List<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_list_inferredType() async {
+    // The summary needs to contain enough information so that when the constant
+    // is resynthesized, the constant value can get the type that was computed
+    // by type inference.
+    var library = await buildLibrary('''
+const Object x = const [1];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            ListLiteral
+              constKeyword: const @17
+              leftBracket: [ @23
+              elements
+                IntegerLiteral
+                  literal: 1 @24
+                  staticType: int
+              rightBracket: ] @25
+              staticType: List<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_list_spread() async {
+    var library = await buildLibrary('''
+const Object x = const <int>[...<int>[1]];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            ListLiteral
+              constKeyword: const @17
+              typeArguments: TypeArgumentList
+                leftBracket: < @23
+                arguments
+                  NamedType
+                    name: int @24
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @27
+              leftBracket: [ @28
+              elements
+                SpreadElement
+                  spreadOperator: ... @29
+                  expression: ListLiteral
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @32
+                      arguments
+                        NamedType
+                          name: int @33
+                          element: dart:core::<fragment>::@class::int
+                          type: int
+                      rightBracket: > @36
+                    leftBracket: [ @37
+                    elements
+                      IntegerLiteral
+                        literal: 1 @38
+                        staticType: int
+                    rightBracket: ] @39
+                    staticType: List<int>
+              rightBracket: ] @40
+              staticType: List<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_list_spread_null_aware() async {
+    var library = await buildLibrary('''
+const Object x = const <int>[...?<int>[1]];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            ListLiteral
+              constKeyword: const @17
+              typeArguments: TypeArgumentList
+                leftBracket: < @23
+                arguments
+                  NamedType
+                    name: int @24
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @27
+              leftBracket: [ @28
+              elements
+                SpreadElement
+                  spreadOperator: ...? @29
+                  expression: ListLiteral
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @33
+                      arguments
+                        NamedType
+                          name: int @34
+                          element: dart:core::<fragment>::@class::int
+                          type: int
+                      rightBracket: > @37
+                    leftBracket: [ @38
+                    elements
+                      IntegerLiteral
+                        literal: 1 @39
+                        staticType: int
+                    rightBracket: ] @40
+                    staticType: List<int>
+              rightBracket: ] @41
+              staticType: List<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_map_if() async {
+    var library = await buildLibrary('''
+const Object x = const <int, int>{if (true) 1: 2};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @17
+              typeArguments: TypeArgumentList
+                leftBracket: < @23
+                arguments
+                  NamedType
+                    name: int @24
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                  NamedType
+                    name: int @29
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @32
+              leftBracket: { @33
+              elements
+                IfElement
+                  ifKeyword: if @34
+                  leftParenthesis: ( @37
+                  expression: BooleanLiteral
+                    literal: true @38
+                    staticType: bool
+                  rightParenthesis: ) @42
+                  thenElement: MapLiteralEntry
+                    key: IntegerLiteral
+                      literal: 1 @44
+                      staticType: int
+                    separator: : @45
+                    value: IntegerLiteral
+                      literal: 2 @47
+                      staticType: int
+              rightBracket: } @48
+              isMap: true
+              staticType: Map<int, int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_map_inferredType() async {
+    // The summary needs to contain enough information so that when the constant
+    // is resynthesized, the constant value can get the type that was computed
+    // by type inference.
+    var library = await buildLibrary('''
+const Object x = const {1: 1.0};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @17
+              leftBracket: { @23
+              elements
+                MapLiteralEntry
+                  key: IntegerLiteral
+                    literal: 1 @24
+                    staticType: int
+                  separator: : @25
+                  value: DoubleLiteral
+                    literal: 1.0 @27
+                    staticType: double
+              rightBracket: } @30
+              isMap: true
+              staticType: Map<int, double>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_map_spread() async {
+    var library = await buildLibrary('''
+const Object x = const <int, int>{...<int, int>{1: 2}};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @17
+              typeArguments: TypeArgumentList
+                leftBracket: < @23
+                arguments
+                  NamedType
+                    name: int @24
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                  NamedType
+                    name: int @29
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @32
+              leftBracket: { @33
+              elements
+                SpreadElement
+                  spreadOperator: ... @34
+                  expression: SetOrMapLiteral
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @37
+                      arguments
+                        NamedType
+                          name: int @38
+                          element: dart:core::<fragment>::@class::int
+                          type: int
+                        NamedType
+                          name: int @43
+                          element: dart:core::<fragment>::@class::int
+                          type: int
+                      rightBracket: > @46
+                    leftBracket: { @47
+                    elements
+                      MapLiteralEntry
+                        key: IntegerLiteral
+                          literal: 1 @48
+                          staticType: int
+                        separator: : @49
+                        value: IntegerLiteral
+                          literal: 2 @51
+                          staticType: int
+                    rightBracket: } @52
+                    isMap: true
+                    staticType: Map<int, int>
+              rightBracket: } @53
+              isMap: true
+              staticType: Map<int, int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_map_spread_null_aware() async {
+    var library = await buildLibrary('''
+const Object x = const <int, int>{...?<int, int>{1: 2}};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @17
+              typeArguments: TypeArgumentList
+                leftBracket: < @23
+                arguments
+                  NamedType
+                    name: int @24
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                  NamedType
+                    name: int @29
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @32
+              leftBracket: { @33
+              elements
+                SpreadElement
+                  spreadOperator: ...? @34
+                  expression: SetOrMapLiteral
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @38
+                      arguments
+                        NamedType
+                          name: int @39
+                          element: dart:core::<fragment>::@class::int
+                          type: int
+                        NamedType
+                          name: int @44
+                          element: dart:core::<fragment>::@class::int
+                          type: int
+                      rightBracket: > @47
+                    leftBracket: { @48
+                    elements
+                      MapLiteralEntry
+                        key: IntegerLiteral
+                          literal: 1 @49
+                          staticType: int
+                        separator: : @50
+                        value: IntegerLiteral
+                          literal: 2 @52
+                          staticType: int
+                    rightBracket: } @53
+                    isMap: true
+                    staticType: Map<int, int>
+              rightBracket: } @54
+              isMap: true
+              staticType: Map<int, int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_methodInvocation() async {
+    var library = await buildLibrary(r'''
+T f<T>(T a) => a;
+const b = f<int>(0);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const b @24
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f @28
+                staticElement: <testLibraryFragment>::@function::f
+                staticType: T Function<T>(T)
+              typeArguments: TypeArgumentList
+                leftBracket: < @29
+                arguments
+                  NamedType
+                    name: int @30
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @33
+              argumentList: ArgumentList
+                leftParenthesis: ( @34
+                arguments
+                  IntegerLiteral
+                    literal: 0 @35
+                    staticType: int
+                rightParenthesis: ) @36
+              staticInvokeType: int Function(int)
+              staticType: int
+              typeArgumentTypes
+                int
+      accessors
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+      functions
+        f @2
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @4
+              defaultType: dynamic
+          parameters
+            requiredPositional a @9
+              type: T
+          returnType: T
+''');
+  }
+
+  test_const_parameterDefaultValue_initializingFormal_functionTyped() async {
+    var library = await buildLibrary(r'''
+class C {
+  final x;
+  const C({this.x: foo});
+}
+int foo() => 42;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            const @29
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalNamed default final this.x @37
+                  reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
+                  type: dynamic
+                  constantInitializer
+                    SimpleIdentifier
+                      token: foo @40
+                      staticElement: <testLibraryFragment>::@function::foo
+                      staticType: int Function()
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+      functions
+        foo @53
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_parameterDefaultValue_initializingFormal_named() async {
+    var library = await buildLibrary(r'''
+class C {
+  final x;
+  const C({this.x: 1 + 2});
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            const @29
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalNamed default final this.x @37
+                  reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
+                  type: dynamic
+                  constantInitializer
+                    BinaryExpression
+                      leftOperand: IntegerLiteral
+                        literal: 1 @40
+                        staticType: int
+                      operator: + @42
+                      rightOperand: IntegerLiteral
+                        literal: 2 @44
+                        staticType: int
+                      staticElement: dart:core::<fragment>::@class::num::@method::+
+                      staticInvokeType: num Function(num)
+                      staticType: int
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_const_parameterDefaultValue_initializingFormal_positional() async {
+    var library = await buildLibrary(r'''
+class C {
+  final x;
+  const C([this.x = 1 + 2]);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            const @29
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default final this.x @37
+                  type: dynamic
+                  constantInitializer
+                    BinaryExpression
+                      leftOperand: IntegerLiteral
+                        literal: 1 @41
+                        staticType: int
+                      operator: + @43
+                      rightOperand: IntegerLiteral
+                        literal: 2 @45
+                        staticType: int
+                      staticElement: dart:core::<fragment>::@class::num::@method::+
+                      staticInvokeType: num Function(num)
+                      staticType: int
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_const_parameterDefaultValue_normal() async {
+    var library = await buildLibrary(r'''
+class C {
+  const C.positional([p = 1 + 2]);
+  const C.named({p: 1 + 2});
+  void methodPositional([p = 1 + 2]) {}
+  void methodPositionalWithoutDefault([p]) {}
+  void methodNamed({p: 1 + 2}) {}
+  void methodNamedWithoutDefault({p}) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const positional @20
+              reference: <testLibraryFragment>::@class::C::@constructor::positional
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 19
+              nameEnd: 30
+              parameters
+                optionalPositional default p @32
+                  type: dynamic
+                  constantInitializer
+                    BinaryExpression
+                      leftOperand: IntegerLiteral
+                        literal: 1 @36
+                        staticType: int
+                      operator: + @38
+                      rightOperand: IntegerLiteral
+                        literal: 2 @40
+                        staticType: int
+                      staticElement: dart:core::<fragment>::@class::num::@method::+
+                      staticInvokeType: num Function(num)
+                      staticType: int
+            const named @55
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 54
+              nameEnd: 60
+              parameters
+                optionalNamed default p @62
+                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::p
+                  type: dynamic
+                  constantInitializer
+                    BinaryExpression
+                      leftOperand: IntegerLiteral
+                        literal: 1 @65
+                        staticType: int
+                      operator: + @67
+                      rightOperand: IntegerLiteral
+                        literal: 2 @69
+                        staticType: int
+                      staticElement: dart:core::<fragment>::@class::num::@method::+
+                      staticInvokeType: num Function(num)
+                      staticType: int
+          methods
+            methodPositional @81
+              reference: <testLibraryFragment>::@class::C::@method::methodPositional
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default p @99
+                  type: dynamic
+                  constantInitializer
+                    BinaryExpression
+                      leftOperand: IntegerLiteral
+                        literal: 1 @103
+                        staticType: int
+                      operator: + @105
+                      rightOperand: IntegerLiteral
+                        literal: 2 @107
+                        staticType: int
+                      staticElement: dart:core::<fragment>::@class::num::@method::+
+                      staticInvokeType: num Function(num)
+                      staticType: int
+              returnType: void
+            methodPositionalWithoutDefault @121
+              reference: <testLibraryFragment>::@class::C::@method::methodPositionalWithoutDefault
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default p @153
+                  type: dynamic
+              returnType: void
+            methodNamed @167
+              reference: <testLibraryFragment>::@class::C::@method::methodNamed
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalNamed default p @180
+                  reference: <testLibraryFragment>::@class::C::@method::methodNamed::@parameter::p
+                  type: dynamic
+                  constantInitializer
+                    BinaryExpression
+                      leftOperand: IntegerLiteral
+                        literal: 1 @183
+                        staticType: int
+                      operator: + @185
+                      rightOperand: IntegerLiteral
+                        literal: 2 @187
+                        staticType: int
+                      staticElement: dart:core::<fragment>::@class::num::@method::+
+                      staticInvokeType: num Function(num)
+                      staticType: int
+              returnType: void
+            methodNamedWithoutDefault @201
+              reference: <testLibraryFragment>::@class::C::@method::methodNamedWithoutDefault
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalNamed default p @228
+                  reference: <testLibraryFragment>::@class::C::@method::methodNamedWithoutDefault::@parameter::p
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_const_postfixExpression_increment() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+const b = a++;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @10
+              staticType: int
+        static const b @19
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PostfixExpression
+              operand: SimpleIdentifier
+                token: a @23
+                staticElement: <null>
+                staticType: null
+              operator: ++ @24
+              readElement: <testLibraryFragment>::@getter::a
+              readType: int
+              writeElement: <testLibraryFragment>::@getter::a
+              writeType: InvalidType
+              staticElement: dart:core::<fragment>::@class::num::@method::+
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_postfixExpression_nullCheck() async {
+    var library = await buildLibrary(r'''
+const int? a = 0;
+const b = a!;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @11
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int?
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @15
+              staticType: int
+        static const b @24
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PostfixExpression
+              operand: SimpleIdentifier
+                token: a @28
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: int?
+              operator: ! @29
+              staticElement: <null>
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int?
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_prefixExpression_class_unaryMinus() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+const b = -a;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @10
+              staticType: int
+        static const b @19
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixExpression
+              operator: - @23
+              operand: SimpleIdentifier
+                token: a @24
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::int::@method::unary-
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_prefixExpression_extension_unaryMinus() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+extension E on Object {
+  int operator -() => 0;
+}
+const a = const Object();
+''');
+    var library = await buildLibrary('''
+import 'a.dart';
+const b = -a;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const b @23
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixExpression
+              operator: - @27
+              operand: SimpleIdentifier
+                token: a @28
+                staticElement: package:test/a.dart::<fragment>::@getter::a
+                staticType: Object
+              staticElement: package:test/a.dart::<fragment>::@extension::E::@method::unary-
+              staticType: int
+      accessors
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_prefixExpression_increment() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+const b = ++a;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @10
+              staticType: int
+        static const b @19
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixExpression
+              operator: ++ @23
+              operand: SimpleIdentifier
+                token: a @25
+                staticElement: <null>
+                staticType: null
+              readElement: <testLibraryFragment>::@getter::a
+              readType: int
+              writeElement: <testLibraryFragment>::@getter::a
+              writeType: InvalidType
+              staticElement: dart:core::<fragment>::@class::num::@method::+
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  void test_const_recordLiteral() async {
+    var library = await buildLibrary('''
+const a = 0;
+const b = (a, a: a);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @10
+              staticType: int
+        static const b @19
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: (int, {int a})
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            RecordLiteral
+              leftParenthesis: ( @23
+              fields
+                SimpleIdentifier
+                  token: a @24
+                  staticElement: <testLibraryFragment>::@getter::a
+                  staticType: int
+                NamedExpression
+                  name: Label
+                    label: SimpleIdentifier
+                      token: a @27
+                      staticElement: <null>
+                      staticType: null
+                    colon: : @28
+                  expression: SimpleIdentifier
+                    token: a @30
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: int
+              rightParenthesis: ) @31
+              staticType: (int, {int a})
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: (int, {int a})
+''');
+  }
+
+  void test_const_recordLiteral_explicitConst() async {
+    var library = await buildLibrary('''
+const a = 0;
+const b = const (a, a: a);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @10
+              staticType: int
+        static const b @19
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: (int, {int a})
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            RecordLiteral
+              constKeyword: const @23
+              leftParenthesis: ( @29
+              fields
+                SimpleIdentifier
+                  token: a @30
+                  staticElement: <testLibraryFragment>::@getter::a
+                  staticType: int
+                NamedExpression
+                  name: Label
+                    label: SimpleIdentifier
+                      token: a @33
+                      staticElement: <null>
+                      staticType: null
+                    colon: : @34
+                  expression: SimpleIdentifier
+                    token: a @36
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: int
+              rightParenthesis: ) @37
+              staticType: (int, {int a})
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: (int, {int a})
+''');
+  }
+
+  test_const_reference_staticField() async {
+    var library = await buildLibrary(r'''
+class C {
+  static const int F = 42;
+}
+const V = C.F;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const F @29
+              reference: <testLibraryFragment>::@class::C::@field::F
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 42 @33
+                  staticType: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get F @-1
+              reference: <testLibraryFragment>::@class::C::@getter::F
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+      topLevelVariables
+        static const V @45
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: C @49
+                staticElement: <testLibraryFragment>::@class::C
+                staticType: null
+              period: . @50
+              identifier: SimpleIdentifier
+                token: F @51
+                staticElement: <testLibraryFragment>::@class::C::@getter::F
+                staticType: int
+              staticElement: <testLibraryFragment>::@class::C::@getter::F
+              staticType: int
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_reference_staticField_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static const int F = 42;
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = C.F;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @23
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: C @27
+                staticElement: package:test/a.dart::<fragment>::@class::C
+                staticType: null
+              period: . @28
+              identifier: SimpleIdentifier
+                token: F @29
+                staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
+                staticType: int
+              staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
+              staticType: int
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_reference_staticField_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static const int F = 42;
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = p.C.F;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @28
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PropertyAccess
+              target: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: p @32
+                  staticElement: <testLibraryFragment>::@prefix::p
+                  staticType: null
+                period: . @33
+                identifier: SimpleIdentifier
+                  token: C @34
+                  staticElement: package:test/a.dart::<fragment>::@class::C
+                  staticType: null
+                staticElement: package:test/a.dart::<fragment>::@class::C
+                staticType: null
+              operator: . @35
+              propertyName: SimpleIdentifier
+                token: F @36
+                staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
+                staticType: int
+              staticType: int
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_reference_staticMethod() async {
+    var library = await buildLibrary(r'''
+class C {
+  static int m(int a, String b) => 42;
+}
+const V = C.m;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            static m @23
+              reference: <testLibraryFragment>::@class::C::@method::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional a @29
+                  type: int
+                requiredPositional b @39
+                  type: String
+              returnType: int
+      topLevelVariables
+        static const V @57
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: int Function(int, String)
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: C @61
+                staticElement: <testLibraryFragment>::@class::C
+                staticType: null
+              period: . @62
+              identifier: SimpleIdentifier
+                token: m @63
+                staticElement: <testLibraryFragment>::@class::C::@method::m
+                staticType: int Function(int, String)
+              staticElement: <testLibraryFragment>::@class::C::@method::m
+              staticType: int Function(int, String)
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function(int, String)
+''');
+  }
+
+  test_const_reference_staticMethod_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static int m(int a, String b) => 42;
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = C.m;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @23
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: int Function(int, String)
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: C @27
+                staticElement: package:test/a.dart::<fragment>::@class::C
+                staticType: null
+              period: . @28
+              identifier: SimpleIdentifier
+                token: m @29
+                staticElement: package:test/a.dart::<fragment>::@class::C::@method::m
+                staticType: int Function(int, String)
+              staticElement: package:test/a.dart::<fragment>::@class::C::@method::m
+              staticType: int Function(int, String)
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function(int, String)
+''');
+  }
+
+  test_const_reference_staticMethod_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {
+  static int m(int a, String b) => 42;
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = p.C.m;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @28
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: int Function(int, String)
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PropertyAccess
+              target: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: p @32
+                  staticElement: <testLibraryFragment>::@prefix::p
+                  staticType: null
+                period: . @33
+                identifier: SimpleIdentifier
+                  token: C @34
+                  staticElement: package:test/a.dart::<fragment>::@class::C
+                  staticType: null
+                staticElement: package:test/a.dart::<fragment>::@class::C
+                staticType: null
+              operator: . @35
+              propertyName: SimpleIdentifier
+                token: m @36
+                staticElement: package:test/a.dart::<fragment>::@class::C::@method::m
+                staticType: int Function(int, String)
+              staticType: int Function(int, String)
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function(int, String)
+''');
+  }
+
+  test_const_reference_staticMethod_ofExtension() async {
+    var library = await buildLibrary('''
+class A {}
+extension E on A {
+  static void f() {}
+}
+const x = E.f;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      extensions
+        E @21
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          extendedType: A
+          methods
+            static f @44
+              reference: <testLibraryFragment>::@extension::E::@method::f
+              enclosingElement: <testLibraryFragment>::@extension::E
+              returnType: void
+      topLevelVariables
+        static const x @59
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: void Function()
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: E @63
+                staticElement: <testLibraryFragment>::@extension::E
+                staticType: null
+              period: . @64
+              identifier: SimpleIdentifier
+                token: f @65
+                staticElement: <testLibraryFragment>::@extension::E::@method::f
+                staticType: void Function()
+              staticElement: <testLibraryFragment>::@extension::E::@method::f
+              staticType: void Function()
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: void Function()
+''');
+  }
+
+  test_const_reference_topLevelFunction() async {
+    var library = await buildLibrary(r'''
+foo() {}
+const V = foo;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const V @15
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: foo @19
+              staticElement: <testLibraryFragment>::@function::foo
+              staticType: dynamic Function()
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+      functions
+        foo @0
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_const_reference_topLevelFunction_generic() async {
+    var library = await buildLibrary(r'''
+R foo<P, R>(P p) {}
+const V = foo;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const V @26
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: R Function<P, R>(P)
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: foo @30
+              staticElement: <testLibraryFragment>::@function::foo
+              staticType: R Function<P, R>(P)
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: R Function<P, R>(P)
+      functions
+        foo @2
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant P @6
+              defaultType: dynamic
+            covariant R @9
+              defaultType: dynamic
+          parameters
+            requiredPositional p @14
+              type: P
+          returnType: R
+''');
+  }
+
+  test_const_reference_topLevelFunction_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+foo() {}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const V = foo;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @23
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: foo @27
+              staticElement: package:test/a.dart::<fragment>::@function::foo
+              staticType: dynamic Function()
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+''');
+  }
+
+  test_const_reference_topLevelFunction_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+foo() {}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const V = p.foo;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @28
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: p @32
+                staticElement: <testLibraryFragment>::@prefix::p
+                staticType: null
+              period: . @33
+              identifier: SimpleIdentifier
+                token: foo @34
+                staticElement: package:test/a.dart::<fragment>::@function::foo
+                staticType: dynamic Function()
+              staticElement: package:test/a.dart::<fragment>::@function::foo
+              staticType: dynamic Function()
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+''');
+  }
+
+  test_const_reference_topLevelVariable() async {
+    var library = await buildLibrary(r'''
+const A = 1;
+const B = A + 2;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const A @6
+          reference: <testLibraryFragment>::@topLevelVariable::A
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 1 @10
+              staticType: int
+        static const B @19
+          reference: <testLibraryFragment>::@topLevelVariable::B
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: SimpleIdentifier
+                token: A @23
+                staticElement: <testLibraryFragment>::@getter::A
+                staticType: int
+              operator: + @25
+              rightOperand: IntegerLiteral
+                literal: 2 @27
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::+
+              staticInvokeType: num Function(num)
+              staticType: int
+      accessors
+        synthetic static get A @-1
+          reference: <testLibraryFragment>::@getter::A
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get B @-1
+          reference: <testLibraryFragment>::@getter::B
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_reference_topLevelVariable_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+const A = 1;
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const B = A + 2;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const B @23
+          reference: <testLibraryFragment>::@topLevelVariable::B
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: SimpleIdentifier
+                token: A @27
+                staticElement: package:test/a.dart::<fragment>::@getter::A
+                staticType: int
+              operator: + @29
+              rightOperand: IntegerLiteral
+                literal: 2 @31
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::+
+              staticInvokeType: num Function(num)
+              staticType: int
+      accessors
+        synthetic static get B @-1
+          reference: <testLibraryFragment>::@getter::B
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_reference_topLevelVariable_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+const A = 1;
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const B = p.A + 2;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const B @28
+          reference: <testLibraryFragment>::@topLevelVariable::B
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: p @32
+                  staticElement: <testLibraryFragment>::@prefix::p
+                  staticType: null
+                period: . @33
+                identifier: SimpleIdentifier
+                  token: A @34
+                  staticElement: package:test/a.dart::<fragment>::@getter::A
+                  staticType: int
+                staticElement: package:test/a.dart::<fragment>::@getter::A
+                staticType: int
+              operator: + @36
+              rightOperand: IntegerLiteral
+                literal: 2 @38
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::+
+              staticInvokeType: num Function(num)
+              staticType: int
+      accessors
+        synthetic static get B @-1
+          reference: <testLibraryFragment>::@getter::B
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_reference_type() async {
+    var library = await buildLibrary(r'''
+class C {}
+class D<T> {}
+enum E {a, b, c}
+typedef F(int a, String b);
+const vDynamic = dynamic;
+const vNull = Null;
+const vObject = Object;
+const vClass = C;
+const vGenericClass = D;
+const vEnum = E;
+const vFunctionTypeAlias = F;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @17
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @19
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+      enums
+        enum E @30
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant a @33
+              reference: <testLibraryFragment>::@enum::E::@field::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant b @36
+              reference: <testLibraryFragment>::@enum::E::@field::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant c @39
+              reference: <testLibraryFragment>::@enum::E::@field::c
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: a @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
+                      staticType: E
+                    SimpleIdentifier
+                      token: b @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
+                      staticType: E
+                    SimpleIdentifier
+                      token: c @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::c
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get b @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get c @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::c
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      typeAliases
+        functionTypeAliasBased F @50
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function(int, String)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @56
+                type: int
+              requiredPositional b @66
+                type: String
+            returnType: dynamic
+      topLevelVariables
+        static const vDynamic @76
+          reference: <testLibraryFragment>::@topLevelVariable::vDynamic
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: dynamic @87
+              staticElement: dynamic@-1
+              staticType: Type
+        static const vNull @102
+          reference: <testLibraryFragment>::@topLevelVariable::vNull
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: Null @110
+              staticElement: dart:core::<fragment>::@class::Null
+              staticType: Type
+        static const vObject @122
+          reference: <testLibraryFragment>::@topLevelVariable::vObject
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: Object @132
+              staticElement: dart:core::<fragment>::@class::Object
+              staticType: Type
+        static const vClass @146
+          reference: <testLibraryFragment>::@topLevelVariable::vClass
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: C @155
+              staticElement: <testLibraryFragment>::@class::C
+              staticType: Type
+        static const vGenericClass @164
+          reference: <testLibraryFragment>::@topLevelVariable::vGenericClass
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: D @180
+              staticElement: <testLibraryFragment>::@class::D
+              staticType: Type
+        static const vEnum @189
+          reference: <testLibraryFragment>::@topLevelVariable::vEnum
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: E @197
+              staticElement: <testLibraryFragment>::@enum::E
+              staticType: Type
+        static const vFunctionTypeAlias @206
+          reference: <testLibraryFragment>::@topLevelVariable::vFunctionTypeAlias
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: F @227
+              staticElement: <testLibraryFragment>::@typeAlias::F
+              staticType: Type
+      accessors
+        synthetic static get vDynamic @-1
+          reference: <testLibraryFragment>::@getter::vDynamic
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+        synthetic static get vNull @-1
+          reference: <testLibraryFragment>::@getter::vNull
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+        synthetic static get vObject @-1
+          reference: <testLibraryFragment>::@getter::vObject
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+        synthetic static get vClass @-1
+          reference: <testLibraryFragment>::@getter::vClass
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+        synthetic static get vGenericClass @-1
+          reference: <testLibraryFragment>::@getter::vGenericClass
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+        synthetic static get vEnum @-1
+          reference: <testLibraryFragment>::@getter::vEnum
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+        synthetic static get vFunctionTypeAlias @-1
+          reference: <testLibraryFragment>::@getter::vFunctionTypeAlias
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+''');
+  }
+
+  test_const_reference_type_functionType() async {
+    var library = await buildLibrary(r'''
+typedef F();
+class C {
+  final f = <F>[];
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @19
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            final f @31
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: List<dynamic Function()>
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: List<dynamic Function()>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+''');
+  }
+
+  test_const_reference_type_imported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {}
+enum E {a, b, c}
+typedef F(int a, String b);
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const vClass = C;
+const vEnum = E;
+const vFunctionTypeAlias = F;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const vClass @23
+          reference: <testLibraryFragment>::@topLevelVariable::vClass
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: C @32
+              staticElement: package:test/a.dart::<fragment>::@class::C
+              staticType: Type
+        static const vEnum @41
+          reference: <testLibraryFragment>::@topLevelVariable::vEnum
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: E @49
+              staticElement: package:test/a.dart::<fragment>::@enum::E
+              staticType: Type
+        static const vFunctionTypeAlias @58
+          reference: <testLibraryFragment>::@topLevelVariable::vFunctionTypeAlias
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: F @79
+              staticElement: package:test/a.dart::<fragment>::@typeAlias::F
+              staticType: Type
+      accessors
+        synthetic static get vClass @-1
+          reference: <testLibraryFragment>::@getter::vClass
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+        synthetic static get vEnum @-1
+          reference: <testLibraryFragment>::@getter::vEnum
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+        synthetic static get vFunctionTypeAlias @-1
+          reference: <testLibraryFragment>::@getter::vFunctionTypeAlias
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+''');
+  }
+
+  test_const_reference_type_imported_withPrefix() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C {}
+enum E {a, b, c}
+typedef F(int a, String b);
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const vClass = p.C;
+const vEnum = p.E;
+const vFunctionTypeAlias = p.F;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const vClass @28
+          reference: <testLibraryFragment>::@topLevelVariable::vClass
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: p @37
+                staticElement: <testLibraryFragment>::@prefix::p
+                staticType: null
+              period: . @38
+              identifier: SimpleIdentifier
+                token: C @39
+                staticElement: package:test/a.dart::<fragment>::@class::C
+                staticType: Type
+              staticElement: package:test/a.dart::<fragment>::@class::C
+              staticType: Type
+        static const vEnum @48
+          reference: <testLibraryFragment>::@topLevelVariable::vEnum
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: p @56
+                staticElement: <testLibraryFragment>::@prefix::p
+                staticType: null
+              period: . @57
+              identifier: SimpleIdentifier
+                token: E @58
+                staticElement: package:test/a.dart::<fragment>::@enum::E
+                staticType: Type
+              staticElement: package:test/a.dart::<fragment>::@enum::E
+              staticType: Type
+        static const vFunctionTypeAlias @67
+          reference: <testLibraryFragment>::@topLevelVariable::vFunctionTypeAlias
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: p @88
+                staticElement: <testLibraryFragment>::@prefix::p
+                staticType: null
+              period: . @89
+              identifier: SimpleIdentifier
+                token: F @90
+                staticElement: package:test/a.dart::<fragment>::@typeAlias::F
+                staticType: Type
+              staticElement: package:test/a.dart::<fragment>::@typeAlias::F
+              staticType: Type
+      accessors
+        synthetic static get vClass @-1
+          reference: <testLibraryFragment>::@getter::vClass
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+        synthetic static get vEnum @-1
+          reference: <testLibraryFragment>::@getter::vEnum
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+        synthetic static get vFunctionTypeAlias @-1
+          reference: <testLibraryFragment>::@getter::vFunctionTypeAlias
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+''');
+  }
+
+  test_const_reference_type_typeParameter() async {
+    var library = await buildLibrary(r'''
+class C<T> {
+  final f = <T>[];
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          fields
+            final f @21
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: List<T>
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: List<T>
+''');
+  }
+
+  test_const_reference_unresolved_prefix0() async {
+    var library = await buildLibrary(r'''
+const V = foo;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const V @6
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: foo @10
+              staticElement: <null>
+              staticType: InvalidType
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_const_reference_unresolved_prefix1() async {
+    var library = await buildLibrary(r'''
+class C {}
+const V = C.foo;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static const V @17
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: C @21
+                staticElement: <testLibraryFragment>::@class::C
+                staticType: null
+              period: . @22
+              identifier: SimpleIdentifier
+                token: foo @23
+                staticElement: <null>
+                staticType: InvalidType
+              staticElement: <null>
+              staticType: InvalidType
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_const_reference_unresolved_prefix2() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class C {}
+''');
+    var library = await buildLibrary(r'''
+import 'foo.dart' as p;
+const V = p.C.foo;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as p @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @21
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as p @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @21
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const V @30
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PropertyAccess
+              target: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: p @34
+                  staticElement: <testLibraryFragment>::@prefix::p
+                  staticType: null
+                period: . @35
+                identifier: SimpleIdentifier
+                  token: C @36
+                  staticElement: package:test/foo.dart::<fragment>::@class::C
+                  staticType: null
+                staticElement: package:test/foo.dart::<fragment>::@class::C
+                staticType: null
+              operator: . @37
+              propertyName: SimpleIdentifier
+                token: foo @38
+                staticElement: <null>
+                staticType: InvalidType
+              staticType: InvalidType
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_const_set_if() async {
+    var library = await buildLibrary('''
+const Object x = const <int>{if (true) 1};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @17
+              typeArguments: TypeArgumentList
+                leftBracket: < @23
+                arguments
+                  NamedType
+                    name: int @24
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @27
+              leftBracket: { @28
+              elements
+                IfElement
+                  ifKeyword: if @29
+                  leftParenthesis: ( @32
+                  expression: BooleanLiteral
+                    literal: true @33
+                    staticType: bool
+                  rightParenthesis: ) @37
+                  thenElement: IntegerLiteral
+                    literal: 1 @39
+                    staticType: int
+              rightBracket: } @40
+              isMap: false
+              staticType: Set<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_set_inferredType() async {
+    // The summary needs to contain enough information so that when the constant
+    // is resynthesized, the constant value can get the type that was computed
+    // by type inference.
+    var library = await buildLibrary('''
+const Object x = const {1};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @17
+              leftBracket: { @23
+              elements
+                IntegerLiteral
+                  literal: 1 @24
+                  staticType: int
+              rightBracket: } @25
+              isMap: false
+              staticType: Set<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_set_spread() async {
+    var library = await buildLibrary('''
+const Object x = const <int>{...<int>{1}};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @17
+              typeArguments: TypeArgumentList
+                leftBracket: < @23
+                arguments
+                  NamedType
+                    name: int @24
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @27
+              leftBracket: { @28
+              elements
+                SpreadElement
+                  spreadOperator: ... @29
+                  expression: SetOrMapLiteral
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @32
+                      arguments
+                        NamedType
+                          name: int @33
+                          element: dart:core::<fragment>::@class::int
+                          type: int
+                      rightBracket: > @36
+                    leftBracket: { @37
+                    elements
+                      IntegerLiteral
+                        literal: 1 @38
+                        staticType: int
+                    rightBracket: } @39
+                    isMap: false
+                    staticType: Set<int>
+              rightBracket: } @40
+              isMap: false
+              staticType: Set<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_set_spread_null_aware() async {
+    var library = await buildLibrary('''
+const Object x = const <int>{...?<int>{1}};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @13
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Object
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @17
+              typeArguments: TypeArgumentList
+                leftBracket: < @23
+                arguments
+                  NamedType
+                    name: int @24
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @27
+              leftBracket: { @28
+              elements
+                SpreadElement
+                  spreadOperator: ...? @29
+                  expression: SetOrMapLiteral
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @33
+                      arguments
+                        NamedType
+                          name: int @34
+                          element: dart:core::<fragment>::@class::int
+                          type: int
+                      rightBracket: > @37
+                    leftBracket: { @38
+                    elements
+                      IntegerLiteral
+                        literal: 1 @39
+                        staticType: int
+                    rightBracket: } @40
+                    isMap: false
+                    staticType: Set<int>
+              rightBracket: } @41
+              isMap: false
+              staticType: Set<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Object
+''');
+  }
+
+  test_const_topLevel_binary() async {
+    var library = await buildLibrary(r'''
+const vEqual = 1 == 2;
+const vAnd = true && false;
+const vOr = false || true;
+const vBitXor = 1 ^ 2;
+const vBitAnd = 1 & 2;
+const vBitOr = 1 | 2;
+const vBitShiftLeft = 1 << 2;
+const vBitShiftRight = 1 >> 2;
+const vAdd = 1 + 2;
+const vSubtract = 1 - 2;
+const vMiltiply = 1 * 2;
+const vDivide = 1 / 2;
+const vFloorDivide = 1 ~/ 2;
+const vModulo = 1 % 2;
+const vGreater = 1 > 2;
+const vGreaterEqual = 1 >= 2;
+const vLess = 1 < 2;
+const vLessEqual = 1 <= 2;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const vEqual @6
+          reference: <testLibraryFragment>::@topLevelVariable::vEqual
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @15
+                staticType: int
+              operator: == @17
+              rightOperand: IntegerLiteral
+                literal: 2 @20
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::==
+              staticInvokeType: bool Function(Object)
+              staticType: bool
+        static const vAnd @29
+          reference: <testLibraryFragment>::@topLevelVariable::vAnd
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: BooleanLiteral
+                literal: true @36
+                staticType: bool
+              operator: && @41
+              rightOperand: BooleanLiteral
+                literal: false @44
+                staticType: bool
+              staticElement: <null>
+              staticInvokeType: null
+              staticType: bool
+        static const vOr @57
+          reference: <testLibraryFragment>::@topLevelVariable::vOr
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: BooleanLiteral
+                literal: false @63
+                staticType: bool
+              operator: || @69
+              rightOperand: BooleanLiteral
+                literal: true @72
+                staticType: bool
+              staticElement: <null>
+              staticInvokeType: null
+              staticType: bool
+        static const vBitXor @84
+          reference: <testLibraryFragment>::@topLevelVariable::vBitXor
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @94
+                staticType: int
+              operator: ^ @96
+              rightOperand: IntegerLiteral
+                literal: 2 @98
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::int::@method::^
+              staticInvokeType: int Function(int)
+              staticType: int
+        static const vBitAnd @107
+          reference: <testLibraryFragment>::@topLevelVariable::vBitAnd
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @117
+                staticType: int
+              operator: & @119
+              rightOperand: IntegerLiteral
+                literal: 2 @121
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::int::@method::&
+              staticInvokeType: int Function(int)
+              staticType: int
+        static const vBitOr @130
+          reference: <testLibraryFragment>::@topLevelVariable::vBitOr
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @139
+                staticType: int
+              operator: | @141
+              rightOperand: IntegerLiteral
+                literal: 2 @143
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::int::@method::|
+              staticInvokeType: int Function(int)
+              staticType: int
+        static const vBitShiftLeft @152
+          reference: <testLibraryFragment>::@topLevelVariable::vBitShiftLeft
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @168
+                staticType: int
+              operator: << @170
+              rightOperand: IntegerLiteral
+                literal: 2 @173
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::int::@method::<<
+              staticInvokeType: int Function(int)
+              staticType: int
+        static const vBitShiftRight @182
+          reference: <testLibraryFragment>::@topLevelVariable::vBitShiftRight
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @199
+                staticType: int
+              operator: >> @201
+              rightOperand: IntegerLiteral
+                literal: 2 @204
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::int::@method::>>
+              staticInvokeType: int Function(int)
+              staticType: int
+        static const vAdd @213
+          reference: <testLibraryFragment>::@topLevelVariable::vAdd
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @220
+                staticType: int
+              operator: + @222
+              rightOperand: IntegerLiteral
+                literal: 2 @224
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::+
+              staticInvokeType: num Function(num)
+              staticType: int
+        static const vSubtract @233
+          reference: <testLibraryFragment>::@topLevelVariable::vSubtract
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @245
+                staticType: int
+              operator: - @247
+              rightOperand: IntegerLiteral
+                literal: 2 @249
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::-
+              staticInvokeType: num Function(num)
+              staticType: int
+        static const vMiltiply @258
+          reference: <testLibraryFragment>::@topLevelVariable::vMiltiply
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @270
+                staticType: int
+              operator: * @272
+              rightOperand: IntegerLiteral
+                literal: 2 @274
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::*
+              staticInvokeType: num Function(num)
+              staticType: int
+        static const vDivide @283
+          reference: <testLibraryFragment>::@topLevelVariable::vDivide
+          enclosingElement: <testLibraryFragment>
+          type: double
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @293
+                staticType: int
+              operator: / @295
+              rightOperand: IntegerLiteral
+                literal: 2 @297
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::/
+              staticInvokeType: double Function(num)
+              staticType: double
+        static const vFloorDivide @306
+          reference: <testLibraryFragment>::@topLevelVariable::vFloorDivide
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @321
+                staticType: int
+              operator: ~/ @323
+              rightOperand: IntegerLiteral
+                literal: 2 @326
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::~/
+              staticInvokeType: int Function(num)
+              staticType: int
+        static const vModulo @335
+          reference: <testLibraryFragment>::@topLevelVariable::vModulo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @345
+                staticType: int
+              operator: % @347
+              rightOperand: IntegerLiteral
+                literal: 2 @349
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::%
+              staticInvokeType: num Function(num)
+              staticType: int
+        static const vGreater @358
+          reference: <testLibraryFragment>::@topLevelVariable::vGreater
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @369
+                staticType: int
+              operator: > @371
+              rightOperand: IntegerLiteral
+                literal: 2 @373
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::>
+              staticInvokeType: bool Function(num)
+              staticType: bool
+        static const vGreaterEqual @382
+          reference: <testLibraryFragment>::@topLevelVariable::vGreaterEqual
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @398
+                staticType: int
+              operator: >= @400
+              rightOperand: IntegerLiteral
+                literal: 2 @403
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::>=
+              staticInvokeType: bool Function(num)
+              staticType: bool
+        static const vLess @412
+          reference: <testLibraryFragment>::@topLevelVariable::vLess
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @420
+                staticType: int
+              operator: < @422
+              rightOperand: IntegerLiteral
+                literal: 2 @424
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::<
+              staticInvokeType: bool Function(num)
+              staticType: bool
+        static const vLessEqual @433
+          reference: <testLibraryFragment>::@topLevelVariable::vLessEqual
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @446
+                staticType: int
+              operator: <= @448
+              rightOperand: IntegerLiteral
+                literal: 2 @451
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::<=
+              staticInvokeType: bool Function(num)
+              staticType: bool
+      accessors
+        synthetic static get vEqual @-1
+          reference: <testLibraryFragment>::@getter::vEqual
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+        synthetic static get vAnd @-1
+          reference: <testLibraryFragment>::@getter::vAnd
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+        synthetic static get vOr @-1
+          reference: <testLibraryFragment>::@getter::vOr
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+        synthetic static get vBitXor @-1
+          reference: <testLibraryFragment>::@getter::vBitXor
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vBitAnd @-1
+          reference: <testLibraryFragment>::@getter::vBitAnd
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vBitOr @-1
+          reference: <testLibraryFragment>::@getter::vBitOr
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vBitShiftLeft @-1
+          reference: <testLibraryFragment>::@getter::vBitShiftLeft
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vBitShiftRight @-1
+          reference: <testLibraryFragment>::@getter::vBitShiftRight
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vAdd @-1
+          reference: <testLibraryFragment>::@getter::vAdd
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vSubtract @-1
+          reference: <testLibraryFragment>::@getter::vSubtract
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vMiltiply @-1
+          reference: <testLibraryFragment>::@getter::vMiltiply
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vDivide @-1
+          reference: <testLibraryFragment>::@getter::vDivide
+          enclosingElement: <testLibraryFragment>
+          returnType: double
+        synthetic static get vFloorDivide @-1
+          reference: <testLibraryFragment>::@getter::vFloorDivide
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vModulo @-1
+          reference: <testLibraryFragment>::@getter::vModulo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vGreater @-1
+          reference: <testLibraryFragment>::@getter::vGreater
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+        synthetic static get vGreaterEqual @-1
+          reference: <testLibraryFragment>::@getter::vGreaterEqual
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+        synthetic static get vLess @-1
+          reference: <testLibraryFragment>::@getter::vLess
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+        synthetic static get vLessEqual @-1
+          reference: <testLibraryFragment>::@getter::vLessEqual
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+''');
+  }
+
+  test_const_topLevel_conditional() async {
+    var library = await buildLibrary(r'''
+const vConditional = (1 == 2) ? 11 : 22;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const vConditional @6
+          reference: <testLibraryFragment>::@topLevelVariable::vConditional
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ConditionalExpression
+              condition: ParenthesizedExpression
+                leftParenthesis: ( @21
+                expression: BinaryExpression
+                  leftOperand: IntegerLiteral
+                    literal: 1 @22
+                    staticType: int
+                  operator: == @24
+                  rightOperand: IntegerLiteral
+                    literal: 2 @27
+                    staticType: int
+                  staticElement: dart:core::<fragment>::@class::num::@method::==
+                  staticInvokeType: bool Function(Object)
+                  staticType: bool
+                rightParenthesis: ) @28
+                staticType: bool
+              question: ? @30
+              thenExpression: IntegerLiteral
+                literal: 11 @32
+                staticType: int
+              colon: : @35
+              elseExpression: IntegerLiteral
+                literal: 22 @37
+                staticType: int
+              staticType: int
+      accessors
+        synthetic static get vConditional @-1
+          reference: <testLibraryFragment>::@getter::vConditional
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_topLevel_identical() async {
+    var library = await buildLibrary(r'''
+const vIdentical = (1 == 2) ? 11 : 22;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const vIdentical @6
+          reference: <testLibraryFragment>::@topLevelVariable::vIdentical
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ConditionalExpression
+              condition: ParenthesizedExpression
+                leftParenthesis: ( @19
+                expression: BinaryExpression
+                  leftOperand: IntegerLiteral
+                    literal: 1 @20
+                    staticType: int
+                  operator: == @22
+                  rightOperand: IntegerLiteral
+                    literal: 2 @25
+                    staticType: int
+                  staticElement: dart:core::<fragment>::@class::num::@method::==
+                  staticInvokeType: bool Function(Object)
+                  staticType: bool
+                rightParenthesis: ) @26
+                staticType: bool
+              question: ? @28
+              thenExpression: IntegerLiteral
+                literal: 11 @30
+                staticType: int
+              colon: : @33
+              elseExpression: IntegerLiteral
+                literal: 22 @35
+                staticType: int
+              staticType: int
+      accessors
+        synthetic static get vIdentical @-1
+          reference: <testLibraryFragment>::@getter::vIdentical
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_topLevel_ifNull() async {
+    var library = await buildLibrary(r'''
+const vIfNull = 1 ?? 2.0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const vIfNull @6
+          reference: <testLibraryFragment>::@topLevelVariable::vIfNull
+          enclosingElement: <testLibraryFragment>
+          type: num
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @16
+                staticType: int
+              operator: ?? @18
+              rightOperand: DoubleLiteral
+                literal: 2.0 @21
+                staticType: double
+              staticElement: <null>
+              staticInvokeType: null
+              staticType: num
+      accessors
+        synthetic static get vIfNull @-1
+          reference: <testLibraryFragment>::@getter::vIfNull
+          enclosingElement: <testLibraryFragment>
+          returnType: num
+''');
+  }
+
+  test_const_topLevel_literal() async {
+    var library = await buildLibrary(r'''
+const vNull = null;
+const vBoolFalse = false;
+const vBoolTrue = true;
+const vIntPositive = 1;
+const vIntNegative = -2;
+const vIntLong1 = 0x7FFFFFFFFFFFFFFF;
+const vIntLong2 = 0xFFFFFFFFFFFFFFFF;
+const vIntLong3 = 0x8000000000000000;
+const vDouble = 2.3;
+const vString = 'abc';
+const vStringConcat = 'aaa' 'bbb';
+const vStringInterpolation = 'aaa ${true} ${42} bbb';
+const vSymbol = #aaa.bbb.ccc;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const vNull @6
+          reference: <testLibraryFragment>::@topLevelVariable::vNull
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @14
+              staticType: Null
+        static const vBoolFalse @26
+          reference: <testLibraryFragment>::@topLevelVariable::vBoolFalse
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BooleanLiteral
+              literal: false @39
+              staticType: bool
+        static const vBoolTrue @52
+          reference: <testLibraryFragment>::@topLevelVariable::vBoolTrue
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BooleanLiteral
+              literal: true @64
+              staticType: bool
+        static const vIntPositive @76
+          reference: <testLibraryFragment>::@topLevelVariable::vIntPositive
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 1 @91
+              staticType: int
+        static const vIntNegative @100
+          reference: <testLibraryFragment>::@topLevelVariable::vIntNegative
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixExpression
+              operator: - @115
+              operand: IntegerLiteral
+                literal: 2 @116
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::int::@method::unary-
+              staticType: int
+        static const vIntLong1 @125
+          reference: <testLibraryFragment>::@topLevelVariable::vIntLong1
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0x7FFFFFFFFFFFFFFF @137
+              staticType: int
+        static const vIntLong2 @163
+          reference: <testLibraryFragment>::@topLevelVariable::vIntLong2
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0xFFFFFFFFFFFFFFFF @175
+              staticType: int
+        static const vIntLong3 @201
+          reference: <testLibraryFragment>::@topLevelVariable::vIntLong3
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0x8000000000000000 @213
+              staticType: int
+        static const vDouble @239
+          reference: <testLibraryFragment>::@topLevelVariable::vDouble
+          enclosingElement: <testLibraryFragment>
+          type: double
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            DoubleLiteral
+              literal: 2.3 @249
+              staticType: double
+        static const vString @260
+          reference: <testLibraryFragment>::@topLevelVariable::vString
+          enclosingElement: <testLibraryFragment>
+          type: String
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleStringLiteral
+              literal: 'abc' @270
+        static const vStringConcat @283
+          reference: <testLibraryFragment>::@topLevelVariable::vStringConcat
+          enclosingElement: <testLibraryFragment>
+          type: String
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            AdjacentStrings
+              strings
+                SimpleStringLiteral
+                  literal: 'aaa' @299
+                SimpleStringLiteral
+                  literal: 'bbb' @305
+              staticType: String
+              stringValue: aaabbb
+        static const vStringInterpolation @318
+          reference: <testLibraryFragment>::@topLevelVariable::vStringInterpolation
+          enclosingElement: <testLibraryFragment>
+          type: String
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            StringInterpolation
+              elements
+                InterpolationString
+                  contents: 'aaa  @341
+                InterpolationExpression
+                  leftBracket: ${ @346
+                  expression: BooleanLiteral
+                    literal: true @348
+                    staticType: bool
+                  rightBracket: } @352
+                InterpolationString
+                  contents:   @353
+                InterpolationExpression
+                  leftBracket: ${ @354
+                  expression: IntegerLiteral
+                    literal: 42 @356
+                    staticType: int
+                  rightBracket: } @358
+                InterpolationString
+                  contents:  bbb' @359
+              staticType: String
+              stringValue: null
+        static const vSymbol @372
+          reference: <testLibraryFragment>::@topLevelVariable::vSymbol
+          enclosingElement: <testLibraryFragment>
+          type: Symbol
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SymbolLiteral
+              poundSign: # @382
+              components
+                aaa
+                  offset: 383
+                bbb
+                  offset: 387
+                ccc
+                  offset: 391
+      accessors
+        synthetic static get vNull @-1
+          reference: <testLibraryFragment>::@getter::vNull
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get vBoolFalse @-1
+          reference: <testLibraryFragment>::@getter::vBoolFalse
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+        synthetic static get vBoolTrue @-1
+          reference: <testLibraryFragment>::@getter::vBoolTrue
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+        synthetic static get vIntPositive @-1
+          reference: <testLibraryFragment>::@getter::vIntPositive
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vIntNegative @-1
+          reference: <testLibraryFragment>::@getter::vIntNegative
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vIntLong1 @-1
+          reference: <testLibraryFragment>::@getter::vIntLong1
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vIntLong2 @-1
+          reference: <testLibraryFragment>::@getter::vIntLong2
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vIntLong3 @-1
+          reference: <testLibraryFragment>::@getter::vIntLong3
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vDouble @-1
+          reference: <testLibraryFragment>::@getter::vDouble
+          enclosingElement: <testLibraryFragment>
+          returnType: double
+        synthetic static get vString @-1
+          reference: <testLibraryFragment>::@getter::vString
+          enclosingElement: <testLibraryFragment>
+          returnType: String
+        synthetic static get vStringConcat @-1
+          reference: <testLibraryFragment>::@getter::vStringConcat
+          enclosingElement: <testLibraryFragment>
+          returnType: String
+        synthetic static get vStringInterpolation @-1
+          reference: <testLibraryFragment>::@getter::vStringInterpolation
+          enclosingElement: <testLibraryFragment>
+          returnType: String
+        synthetic static get vSymbol @-1
+          reference: <testLibraryFragment>::@getter::vSymbol
+          enclosingElement: <testLibraryFragment>
+          returnType: Symbol
+''');
+  }
+
+  test_const_topLevel_methodInvocation_questionPeriod() async {
+    var library = await buildLibrary(r'''
+const int? a = 0;
+const b = a?.toString();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @11
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int?
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @15
+              staticType: int
+        static const b @24
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: String?
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            MethodInvocation
+              target: SimpleIdentifier
+                token: a @28
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: int?
+              operator: ?. @29
+              methodName: SimpleIdentifier
+                token: toString @31
+                staticElement: dart:core::<fragment>::@class::int::@method::toString
+                staticType: String Function()
+              argumentList: ArgumentList
+                leftParenthesis: ( @39
+                rightParenthesis: ) @40
+              staticInvokeType: String Function()
+              staticType: String?
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int?
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: String?
+''');
+  }
+
+  test_const_topLevel_methodInvocation_questionPeriodPeriod() async {
+    var library = await buildLibrary(r'''
+const int? a = 0;
+const b = a?..toString();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @11
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int?
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @15
+              staticType: int
+        static const b @24
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: int?
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            CascadeExpression
+              target: SimpleIdentifier
+                token: a @28
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: int?
+              cascadeSections
+                MethodInvocation
+                  operator: ?.. @29
+                  methodName: SimpleIdentifier
+                    token: toString @32
+                    staticElement: dart:core::<fragment>::@class::int::@method::toString
+                    staticType: String Function()
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @40
+                    rightParenthesis: ) @41
+                  staticInvokeType: String Function()
+                  staticType: String
+              staticType: int?
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int?
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: int?
+''');
+  }
+
+  test_const_topLevel_nullAware_propertyAccess() async {
+    var library = await buildLibrary(r'''
+const String? a = '';
+
+const List<int?> b = [
+  a?.length,
+];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @14
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: String?
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            SimpleStringLiteral
+              literal: '' @18
+        static const b @40
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: List<int?>
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            ListLiteral
+              leftBracket: [ @44
+              elements
+                PropertyAccess
+                  target: SimpleIdentifier
+                    token: a @48
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: String?
+                  operator: ?. @49
+                  propertyName: SimpleIdentifier
+                    token: length @51
+                    staticElement: dart:core::<fragment>::@class::String::@getter::length
+                    staticType: int
+                  staticType: int?
+              rightBracket: ] @59
+              staticType: List<int?>
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: String?
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: List<int?>
+''');
+  }
+
+  test_const_topLevel_parenthesis() async {
+    var library = await buildLibrary(r'''
+const int v1 = (1 + 2) * 3;
+const int v2 = -(1 + 2);
+const int v3 = ('aaa' + 'bbb').length;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v1 @10
+          reference: <testLibraryFragment>::@topLevelVariable::v1
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            BinaryExpression
+              leftOperand: ParenthesizedExpression
+                leftParenthesis: ( @15
+                expression: BinaryExpression
+                  leftOperand: IntegerLiteral
+                    literal: 1 @16
+                    staticType: int
+                  operator: + @18
+                  rightOperand: IntegerLiteral
+                    literal: 2 @20
+                    staticType: int
+                  staticElement: dart:core::<fragment>::@class::num::@method::+
+                  staticInvokeType: num Function(num)
+                  staticType: int
+                rightParenthesis: ) @21
+                staticType: int
+              operator: * @23
+              rightOperand: IntegerLiteral
+                literal: 3 @25
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::*
+              staticInvokeType: num Function(num)
+              staticType: int
+        static const v2 @38
+          reference: <testLibraryFragment>::@topLevelVariable::v2
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            PrefixExpression
+              operator: - @43
+              operand: ParenthesizedExpression
+                leftParenthesis: ( @44
+                expression: BinaryExpression
+                  leftOperand: IntegerLiteral
+                    literal: 1 @45
+                    staticType: int
+                  operator: + @47
+                  rightOperand: IntegerLiteral
+                    literal: 2 @49
+                    staticType: int
+                  staticElement: dart:core::<fragment>::@class::num::@method::+
+                  staticInvokeType: num Function(num)
+                  staticType: int
+                rightParenthesis: ) @50
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::int::@method::unary-
+              staticType: int
+        static const v3 @63
+          reference: <testLibraryFragment>::@topLevelVariable::v3
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            PropertyAccess
+              target: ParenthesizedExpression
+                leftParenthesis: ( @68
+                expression: BinaryExpression
+                  leftOperand: SimpleStringLiteral
+                    literal: 'aaa' @69
+                  operator: + @75
+                  rightOperand: SimpleStringLiteral
+                    literal: 'bbb' @77
+                  staticElement: dart:core::<fragment>::@class::String::@method::+
+                  staticInvokeType: String Function(String)
+                  staticType: String
+                rightParenthesis: ) @82
+                staticType: String
+              operator: . @83
+              propertyName: SimpleIdentifier
+                token: length @84
+                staticElement: dart:core::<fragment>::@class::String::@getter::length
+                staticType: int
+              staticType: int
+      accessors
+        synthetic static get v1 @-1
+          reference: <testLibraryFragment>::@getter::v1
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get v2 @-1
+          reference: <testLibraryFragment>::@getter::v2
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get v3 @-1
+          reference: <testLibraryFragment>::@getter::v3
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_topLevel_prefix() async {
+    var library = await buildLibrary(r'''
+const vNotEqual = 1 != 2;
+const vNot = !true;
+const vNegate = -1;
+const vComplement = ~1;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const vNotEqual @6
+          reference: <testLibraryFragment>::@topLevelVariable::vNotEqual
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            BinaryExpression
+              leftOperand: IntegerLiteral
+                literal: 1 @18
+                staticType: int
+              operator: != @20
+              rightOperand: IntegerLiteral
+                literal: 2 @23
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::==
+              staticInvokeType: bool Function(Object)
+              staticType: bool
+        static const vNot @32
+          reference: <testLibraryFragment>::@topLevelVariable::vNot
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixExpression
+              operator: ! @39
+              operand: BooleanLiteral
+                literal: true @40
+                staticType: bool
+              staticElement: <null>
+              staticType: bool
+        static const vNegate @52
+          reference: <testLibraryFragment>::@topLevelVariable::vNegate
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixExpression
+              operator: - @62
+              operand: IntegerLiteral
+                literal: 1 @63
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::int::@method::unary-
+              staticType: int
+        static const vComplement @72
+          reference: <testLibraryFragment>::@topLevelVariable::vComplement
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixExpression
+              operator: ~ @86
+              operand: IntegerLiteral
+                literal: 1 @87
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::int::@method::~
+              staticType: int
+      accessors
+        synthetic static get vNotEqual @-1
+          reference: <testLibraryFragment>::@getter::vNotEqual
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+        synthetic static get vNot @-1
+          reference: <testLibraryFragment>::@getter::vNot
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+        synthetic static get vNegate @-1
+          reference: <testLibraryFragment>::@getter::vNegate
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get vComplement @-1
+          reference: <testLibraryFragment>::@getter::vComplement
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_const_topLevel_super() async {
+    var library = await buildLibrary(r'''
+const vSuper = super;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const vSuper @6
+          reference: <testLibraryFragment>::@topLevelVariable::vSuper
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SuperExpression
+              superKeyword: super @15
+              staticType: InvalidType
+      accessors
+        synthetic static get vSuper @-1
+          reference: <testLibraryFragment>::@getter::vSuper
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_const_topLevel_this() async {
+    var library = await buildLibrary(r'''
+const vThis = this;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const vThis @6
+          reference: <testLibraryFragment>::@topLevelVariable::vThis
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ThisExpression
+              thisKeyword: this @14
+              staticType: dynamic
+      accessors
+        synthetic static get vThis @-1
+          reference: <testLibraryFragment>::@getter::vThis
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_const_topLevel_throw() async {
+    var library = await buildLibrary(r'''
+const c = throw 42;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const c @6
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: Never
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ThrowExpression
+              throwKeyword: throw @10
+              expression: IntegerLiteral
+                literal: 42 @16
+                staticType: int
+              staticType: Never
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: Never
+''');
+  }
+
+  test_const_topLevel_typedList() async {
+    var library = await buildLibrary(r'''
+const vNull = const <Null>[];
+const vDynamic = const <dynamic>[1, 2, 3];
+const vInterfaceNoTypeParameters = const <int>[1, 2, 3];
+const vInterfaceNoTypeArguments = const <List>[];
+const vInterfaceWithTypeArguments = const <List<String>>[];
+const vInterfaceWithTypeArguments2 = const <Map<int, List<String>>>[];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const vNull @6
+          reference: <testLibraryFragment>::@topLevelVariable::vNull
+          enclosingElement: <testLibraryFragment>
+          type: List<Null>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ListLiteral
+              constKeyword: const @14
+              typeArguments: TypeArgumentList
+                leftBracket: < @20
+                arguments
+                  NamedType
+                    name: Null @21
+                    element: dart:core::<fragment>::@class::Null
+                    type: Null
+                rightBracket: > @25
+              leftBracket: [ @26
+              rightBracket: ] @27
+              staticType: List<Null>
+        static const vDynamic @36
+          reference: <testLibraryFragment>::@topLevelVariable::vDynamic
+          enclosingElement: <testLibraryFragment>
+          type: List<dynamic>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ListLiteral
+              constKeyword: const @47
+              typeArguments: TypeArgumentList
+                leftBracket: < @53
+                arguments
+                  NamedType
+                    name: dynamic @54
+                    element: dynamic@-1
+                    type: dynamic
+                rightBracket: > @61
+              leftBracket: [ @62
+              elements
+                IntegerLiteral
+                  literal: 1 @63
+                  staticType: int
+                IntegerLiteral
+                  literal: 2 @66
+                  staticType: int
+                IntegerLiteral
+                  literal: 3 @69
+                  staticType: int
+              rightBracket: ] @70
+              staticType: List<dynamic>
+        static const vInterfaceNoTypeParameters @79
+          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceNoTypeParameters
+          enclosingElement: <testLibraryFragment>
+          type: List<int>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ListLiteral
+              constKeyword: const @108
+              typeArguments: TypeArgumentList
+                leftBracket: < @114
+                arguments
+                  NamedType
+                    name: int @115
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @118
+              leftBracket: [ @119
+              elements
+                IntegerLiteral
+                  literal: 1 @120
+                  staticType: int
+                IntegerLiteral
+                  literal: 2 @123
+                  staticType: int
+                IntegerLiteral
+                  literal: 3 @126
+                  staticType: int
+              rightBracket: ] @127
+              staticType: List<int>
+        static const vInterfaceNoTypeArguments @136
+          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceNoTypeArguments
+          enclosingElement: <testLibraryFragment>
+          type: List<List<dynamic>>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ListLiteral
+              constKeyword: const @164
+              typeArguments: TypeArgumentList
+                leftBracket: < @170
+                arguments
+                  NamedType
+                    name: List @171
+                    element: dart:core::<fragment>::@class::List
+                    type: List<dynamic>
+                rightBracket: > @175
+              leftBracket: [ @176
+              rightBracket: ] @177
+              staticType: List<List<dynamic>>
+        static const vInterfaceWithTypeArguments @186
+          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceWithTypeArguments
+          enclosingElement: <testLibraryFragment>
+          type: List<List<String>>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ListLiteral
+              constKeyword: const @216
+              typeArguments: TypeArgumentList
+                leftBracket: < @222
+                arguments
+                  NamedType
+                    name: List @223
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @227
+                      arguments
+                        NamedType
+                          name: String @228
+                          element: dart:core::<fragment>::@class::String
+                          type: String
+                      rightBracket: > @234
+                    element: dart:core::<fragment>::@class::List
+                    type: List<String>
+                rightBracket: > @235
+              leftBracket: [ @236
+              rightBracket: ] @237
+              staticType: List<List<String>>
+        static const vInterfaceWithTypeArguments2 @246
+          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceWithTypeArguments2
+          enclosingElement: <testLibraryFragment>
+          type: List<Map<int, List<String>>>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ListLiteral
+              constKeyword: const @277
+              typeArguments: TypeArgumentList
+                leftBracket: < @283
+                arguments
+                  NamedType
+                    name: Map @284
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @287
+                      arguments
+                        NamedType
+                          name: int @288
+                          element: dart:core::<fragment>::@class::int
+                          type: int
+                        NamedType
+                          name: List @293
+                          typeArguments: TypeArgumentList
+                            leftBracket: < @297
+                            arguments
+                              NamedType
+                                name: String @298
+                                element: dart:core::<fragment>::@class::String
+                                type: String
+                            rightBracket: > @304
+                          element: dart:core::<fragment>::@class::List
+                          type: List<String>
+                      rightBracket: > @305
+                    element: dart:core::<fragment>::@class::Map
+                    type: Map<int, List<String>>
+                rightBracket: > @306
+              leftBracket: [ @307
+              rightBracket: ] @308
+              staticType: List<Map<int, List<String>>>
+      accessors
+        synthetic static get vNull @-1
+          reference: <testLibraryFragment>::@getter::vNull
+          enclosingElement: <testLibraryFragment>
+          returnType: List<Null>
+        synthetic static get vDynamic @-1
+          reference: <testLibraryFragment>::@getter::vDynamic
+          enclosingElement: <testLibraryFragment>
+          returnType: List<dynamic>
+        synthetic static get vInterfaceNoTypeParameters @-1
+          reference: <testLibraryFragment>::@getter::vInterfaceNoTypeParameters
+          enclosingElement: <testLibraryFragment>
+          returnType: List<int>
+        synthetic static get vInterfaceNoTypeArguments @-1
+          reference: <testLibraryFragment>::@getter::vInterfaceNoTypeArguments
+          enclosingElement: <testLibraryFragment>
+          returnType: List<List<dynamic>>
+        synthetic static get vInterfaceWithTypeArguments @-1
+          reference: <testLibraryFragment>::@getter::vInterfaceWithTypeArguments
+          enclosingElement: <testLibraryFragment>
+          returnType: List<List<String>>
+        synthetic static get vInterfaceWithTypeArguments2 @-1
+          reference: <testLibraryFragment>::@getter::vInterfaceWithTypeArguments2
+          enclosingElement: <testLibraryFragment>
+          returnType: List<Map<int, List<String>>>
+''');
+  }
+
+  test_const_topLevel_typedList_imported() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+const v = const <C>[];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const v @23
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: List<C>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ListLiteral
+              constKeyword: const @27
+              typeArguments: TypeArgumentList
+                leftBracket: < @33
+                arguments
+                  NamedType
+                    name: C @34
+                    element: package:test/a.dart::<fragment>::@class::C
+                    type: C
+                rightBracket: > @35
+              leftBracket: [ @36
+              rightBracket: ] @37
+              staticType: List<C>
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: List<C>
+''');
+  }
+
+  test_const_topLevel_typedList_importedWithPrefix() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    var library = await buildLibrary(r'''
+import 'a.dart' as p;
+const v = const <p.C>[];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as p @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @19
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as p @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @19
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const v @28
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: List<C>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ListLiteral
+              constKeyword: const @32
+              typeArguments: TypeArgumentList
+                leftBracket: < @38
+                arguments
+                  NamedType
+                    importPrefix: ImportPrefixReference
+                      name: p @39
+                      period: . @40
+                      element: <testLibraryFragment>::@prefix::p
+                    name: C @41
+                    element: package:test/a.dart::<fragment>::@class::C
+                    type: C
+                rightBracket: > @42
+              leftBracket: [ @43
+              rightBracket: ] @44
+              staticType: List<C>
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: List<C>
+''');
+  }
+
+  test_const_topLevel_typedList_typedefArgument() async {
+    var library = await buildLibrary(r'''
+typedef int F(String id);
+const v = const <F>[];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @12
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: int Function(String)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional id @21
+                type: String
+            returnType: int
+      topLevelVariables
+        static const v @32
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: List<int Function(String)>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ListLiteral
+              constKeyword: const @36
+              typeArguments: TypeArgumentList
+                leftBracket: < @42
+                arguments
+                  NamedType
+                    name: F @43
+                    element: <testLibraryFragment>::@typeAlias::F
+                    type: int Function(String)
+                      alias: <testLibraryFragment>::@typeAlias::F
+                rightBracket: > @44
+              leftBracket: [ @45
+              rightBracket: ] @46
+              staticType: List<int Function(String)>
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: List<int Function(String)>
+''');
+  }
+
+  test_const_topLevel_typedMap() async {
+    var library = await buildLibrary(r'''
+const vDynamic1 = const <dynamic, int>{};
+const vDynamic2 = const <int, dynamic>{};
+const vInterface = const <int, String>{};
+const vInterfaceWithTypeArguments = const <int, List<String>>{};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const vDynamic1 @6
+          reference: <testLibraryFragment>::@topLevelVariable::vDynamic1
+          enclosingElement: <testLibraryFragment>
+          type: Map<dynamic, int>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @18
+              typeArguments: TypeArgumentList
+                leftBracket: < @24
+                arguments
+                  NamedType
+                    name: dynamic @25
+                    element: dynamic@-1
+                    type: dynamic
+                  NamedType
+                    name: int @34
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @37
+              leftBracket: { @38
+              rightBracket: } @39
+              isMap: true
+              staticType: Map<dynamic, int>
+        static const vDynamic2 @48
+          reference: <testLibraryFragment>::@topLevelVariable::vDynamic2
+          enclosingElement: <testLibraryFragment>
+          type: Map<int, dynamic>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @60
+              typeArguments: TypeArgumentList
+                leftBracket: < @66
+                arguments
+                  NamedType
+                    name: int @67
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                  NamedType
+                    name: dynamic @72
+                    element: dynamic@-1
+                    type: dynamic
+                rightBracket: > @79
+              leftBracket: { @80
+              rightBracket: } @81
+              isMap: true
+              staticType: Map<int, dynamic>
+        static const vInterface @90
+          reference: <testLibraryFragment>::@topLevelVariable::vInterface
+          enclosingElement: <testLibraryFragment>
+          type: Map<int, String>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @103
+              typeArguments: TypeArgumentList
+                leftBracket: < @109
+                arguments
+                  NamedType
+                    name: int @110
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                  NamedType
+                    name: String @115
+                    element: dart:core::<fragment>::@class::String
+                    type: String
+                rightBracket: > @121
+              leftBracket: { @122
+              rightBracket: } @123
+              isMap: true
+              staticType: Map<int, String>
+        static const vInterfaceWithTypeArguments @132
+          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceWithTypeArguments
+          enclosingElement: <testLibraryFragment>
+          type: Map<int, List<String>>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @162
+              typeArguments: TypeArgumentList
+                leftBracket: < @168
+                arguments
+                  NamedType
+                    name: int @169
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                  NamedType
+                    name: List @174
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @178
+                      arguments
+                        NamedType
+                          name: String @179
+                          element: dart:core::<fragment>::@class::String
+                          type: String
+                      rightBracket: > @185
+                    element: dart:core::<fragment>::@class::List
+                    type: List<String>
+                rightBracket: > @186
+              leftBracket: { @187
+              rightBracket: } @188
+              isMap: true
+              staticType: Map<int, List<String>>
+      accessors
+        synthetic static get vDynamic1 @-1
+          reference: <testLibraryFragment>::@getter::vDynamic1
+          enclosingElement: <testLibraryFragment>
+          returnType: Map<dynamic, int>
+        synthetic static get vDynamic2 @-1
+          reference: <testLibraryFragment>::@getter::vDynamic2
+          enclosingElement: <testLibraryFragment>
+          returnType: Map<int, dynamic>
+        synthetic static get vInterface @-1
+          reference: <testLibraryFragment>::@getter::vInterface
+          enclosingElement: <testLibraryFragment>
+          returnType: Map<int, String>
+        synthetic static get vInterfaceWithTypeArguments @-1
+          reference: <testLibraryFragment>::@getter::vInterfaceWithTypeArguments
+          enclosingElement: <testLibraryFragment>
+          returnType: Map<int, List<String>>
+''');
+  }
+
+  test_const_topLevel_typedSet() async {
+    var library = await buildLibrary(r'''
+const vDynamic1 = const <dynamic>{};
+const vInterface = const <int>{};
+const vInterfaceWithTypeArguments = const <List<String>>{};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const vDynamic1 @6
+          reference: <testLibraryFragment>::@topLevelVariable::vDynamic1
+          enclosingElement: <testLibraryFragment>
+          type: Set<dynamic>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @18
+              typeArguments: TypeArgumentList
+                leftBracket: < @24
+                arguments
+                  NamedType
+                    name: dynamic @25
+                    element: dynamic@-1
+                    type: dynamic
+                rightBracket: > @32
+              leftBracket: { @33
+              rightBracket: } @34
+              isMap: false
+              staticType: Set<dynamic>
+        static const vInterface @43
+          reference: <testLibraryFragment>::@topLevelVariable::vInterface
+          enclosingElement: <testLibraryFragment>
+          type: Set<int>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @56
+              typeArguments: TypeArgumentList
+                leftBracket: < @62
+                arguments
+                  NamedType
+                    name: int @63
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @66
+              leftBracket: { @67
+              rightBracket: } @68
+              isMap: false
+              staticType: Set<int>
+        static const vInterfaceWithTypeArguments @77
+          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceWithTypeArguments
+          enclosingElement: <testLibraryFragment>
+          type: Set<List<String>>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @107
+              typeArguments: TypeArgumentList
+                leftBracket: < @113
+                arguments
+                  NamedType
+                    name: List @114
+                    typeArguments: TypeArgumentList
+                      leftBracket: < @118
+                      arguments
+                        NamedType
+                          name: String @119
+                          element: dart:core::<fragment>::@class::String
+                          type: String
+                      rightBracket: > @125
+                    element: dart:core::<fragment>::@class::List
+                    type: List<String>
+                rightBracket: > @126
+              leftBracket: { @127
+              rightBracket: } @128
+              isMap: false
+              staticType: Set<List<String>>
+      accessors
+        synthetic static get vDynamic1 @-1
+          reference: <testLibraryFragment>::@getter::vDynamic1
+          enclosingElement: <testLibraryFragment>
+          returnType: Set<dynamic>
+        synthetic static get vInterface @-1
+          reference: <testLibraryFragment>::@getter::vInterface
+          enclosingElement: <testLibraryFragment>
+          returnType: Set<int>
+        synthetic static get vInterfaceWithTypeArguments @-1
+          reference: <testLibraryFragment>::@getter::vInterfaceWithTypeArguments
+          enclosingElement: <testLibraryFragment>
+          returnType: Set<List<String>>
+''');
+  }
+
+  test_const_topLevel_untypedList() async {
+    var library = await buildLibrary(r'''
+const v = const [1, 2, 3];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: List<int>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            ListLiteral
+              constKeyword: const @10
+              leftBracket: [ @16
+              elements
+                IntegerLiteral
+                  literal: 1 @17
+                  staticType: int
+                IntegerLiteral
+                  literal: 2 @20
+                  staticType: int
+                IntegerLiteral
+                  literal: 3 @23
+                  staticType: int
+              rightBracket: ] @24
+              staticType: List<int>
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: List<int>
+''');
+  }
+
+  test_const_topLevel_untypedMap() async {
+    var library = await buildLibrary(r'''
+const v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: Map<int, String>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @10
+              leftBracket: { @16
+              elements
+                MapLiteralEntry
+                  key: IntegerLiteral
+                    literal: 0 @17
+                    staticType: int
+                  separator: : @18
+                  value: SimpleStringLiteral
+                    literal: 'aaa' @20
+                MapLiteralEntry
+                  key: IntegerLiteral
+                    literal: 1 @27
+                    staticType: int
+                  separator: : @28
+                  value: SimpleStringLiteral
+                    literal: 'bbb' @30
+                MapLiteralEntry
+                  key: IntegerLiteral
+                    literal: 2 @37
+                    staticType: int
+                  separator: : @38
+                  value: SimpleStringLiteral
+                    literal: 'ccc' @40
+              rightBracket: } @45
+              isMap: true
+              staticType: Map<int, String>
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: Map<int, String>
+''');
+  }
+
+  test_const_topLevel_untypedSet() async {
+    var library = await buildLibrary(r'''
+const v = const {0, 1, 2};
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: Set<int>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SetOrMapLiteral
+              constKeyword: const @10
+              leftBracket: { @16
+              elements
+                IntegerLiteral
+                  literal: 0 @17
+                  staticType: int
+                IntegerLiteral
+                  literal: 1 @20
+                  staticType: int
+                IntegerLiteral
+                  literal: 2 @23
+                  staticType: int
+              rightBracket: } @24
+              isMap: false
+              staticType: Set<int>
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: Set<int>
+''');
+  }
+
+  test_const_typeLiteral() async {
+    var library = await buildLibrary(r'''
+const v = List<int>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            TypeLiteral
+              type: NamedType
+                name: List @10
+                typeArguments: TypeArgumentList
+                  leftBracket: < @14
+                  arguments
+                    NamedType
+                      name: int @15
+                      element: dart:core::<fragment>::@class::int
+                      type: int
+                  rightBracket: > @18
+                element: dart:core::<fragment>::@class::List
+                type: List<int>
+              staticType: Type
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+''');
+  }
+
+  test_constExpr_pushReference_enum_field() async {
+    var library = await buildLibrary('''
+enum E {a, b, c}
+final vValue = E.a;
+final vValues = E.values;
+final vIndex = E.a.index;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant a @8
+              reference: <testLibraryFragment>::@enum::E::@field::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant b @11
+              reference: <testLibraryFragment>::@enum::E::@field::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant c @14
+              reference: <testLibraryFragment>::@enum::E::@field::c
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: a @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
+                      staticType: E
+                    SimpleIdentifier
+                      token: b @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
+                      staticType: E
+                    SimpleIdentifier
+                      token: c @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::c
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get b @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get c @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::c
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      topLevelVariables
+        static final vValue @23
+          reference: <testLibraryFragment>::@topLevelVariable::vValue
+          enclosingElement: <testLibraryFragment>
+          type: E
+          shouldUseTypeForInitializerInference: false
+        static final vValues @43
+          reference: <testLibraryFragment>::@topLevelVariable::vValues
+          enclosingElement: <testLibraryFragment>
+          type: List<E>
+          shouldUseTypeForInitializerInference: false
+        static final vIndex @69
+          reference: <testLibraryFragment>::@topLevelVariable::vIndex
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get vValue @-1
+          reference: <testLibraryFragment>::@getter::vValue
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static get vValues @-1
+          reference: <testLibraryFragment>::@getter::vValues
+          enclosingElement: <testLibraryFragment>
+          returnType: List<E>
+        synthetic static get vIndex @-1
+          reference: <testLibraryFragment>::@getter::vIndex
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_constExpr_pushReference_enum_method() async {
+    var library = await buildLibrary('''
+enum E {a}
+final vToString = E.a.toString();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant a @8
+              reference: <testLibraryFragment>::@enum::E::@field::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: a @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      topLevelVariables
+        static final vToString @17
+          reference: <testLibraryFragment>::@topLevelVariable::vToString
+          enclosingElement: <testLibraryFragment>
+          type: String
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get vToString @-1
+          reference: <testLibraryFragment>::@getter::vToString
+          enclosingElement: <testLibraryFragment>
+          returnType: String
+''');
+  }
+
+  test_constExpr_pushReference_field_simpleIdentifier() async {
+    var library = await buildLibrary('''
+class C {
+  static const a = b;
+  static const b = null;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const a @25
+              reference: <testLibraryFragment>::@class::C::@field::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                SimpleIdentifier
+                  token: b @29
+                  staticElement: <testLibraryFragment>::@class::C::@getter::b
+                  staticType: dynamic
+            static const b @47
+              reference: <testLibraryFragment>::@class::C::@field::b
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                NullLiteral
+                  literal: null @51
+                  staticType: Null
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@class::C::@getter::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic static get b @-1
+              reference: <testLibraryFragment>::@class::C::@getter::b
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_constExpr_pushReference_staticMethod_simpleIdentifier() async {
+    var library = await buildLibrary('''
+class C {
+  static const a = m;
+  static m() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const a @25
+              reference: <testLibraryFragment>::@class::C::@field::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic Function()
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                SimpleIdentifier
+                  token: m @29
+                  staticElement: <testLibraryFragment>::@class::C::@method::m
+                  staticType: dynamic Function()
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@class::C::@getter::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic Function()
+          methods
+            static m @41
+              reference: <testLibraryFragment>::@class::C::@method::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  // TODO(scheglov): This is duplicate.
+  void _assertTypeStr(DartType type, String expected) {
+    var typeStr = type.getDisplayString();
+    expect(typeStr, expected);
+  }
+}
+
+@reflectiveTest
+class ConstElementTest_fromBytes extends ConstElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class ConstElementTest_keepLinking extends ConstElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/default_value_test.dart b/pkg/analyzer/test/src/summary/elements/default_value_test.dart
new file mode 100644
index 0000000..af8e5a5
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/default_value_test.dart
@@ -0,0 +1,954 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(DefaultValueElementTest_keepLinking);
+    defineReflectiveTests(DefaultValueElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class DefaultValueElementTest extends ElementsBaseTest {
+  test_defaultValue_eliminateTypeParameters() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const X({List<T> a = const []});
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            abstract X @21
+              reference: <testLibraryFragment>::@class::A::@method::X
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                optionalNamed default a @32
+                  reference: <testLibraryFragment>::@class::A::@method::X::@parameter::a
+                  type: List<T>
+                  constantInitializer
+                    ListLiteral
+                      constKeyword: const @36
+                      leftBracket: [ @42
+                      rightBracket: ] @43
+                      staticType: List<Never>
+              returnType: dynamic
+''');
+  }
+
+  test_defaultValue_genericFunction() async {
+    var library = await buildLibrary('''
+typedef void F<T>(T v);
+
+void defaultF<T>(T v) {}
+
+class X {
+  final F f;
+  const X({this.f: defaultF});
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class X @57
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          fields
+            final f @71
+              reference: <testLibraryFragment>::@class::X::@field::f
+              enclosingElement: <testLibraryFragment>::@class::X
+              type: void Function(dynamic)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    dynamic
+          constructors
+            const @82
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+              parameters
+                optionalNamed default final this.f @90
+                  reference: <testLibraryFragment>::@class::X::@constructor::new::@parameter::f
+                  type: void Function(dynamic)
+                    alias: <testLibraryFragment>::@typeAlias::F
+                      typeArguments
+                        dynamic
+                  constantInitializer
+                    FunctionReference
+                      function: SimpleIdentifier
+                        token: defaultF @93
+                        staticElement: <testLibraryFragment>::@function::defaultF
+                        staticType: void Function<T>(T)
+                      staticType: void Function(dynamic)
+                      typeArgumentTypes
+                        dynamic
+                  field: <testLibraryFragment>::@class::X::@field::f
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::X::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::X
+              returnType: void Function(dynamic)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    dynamic
+      typeAliases
+        functionTypeAliasBased F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @15
+              defaultType: dynamic
+          aliasedType: void Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional v @20
+                type: T
+            returnType: void
+      functions
+        defaultF @30
+          reference: <testLibraryFragment>::@function::defaultF
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @39
+              defaultType: dynamic
+          parameters
+            requiredPositional v @44
+              type: T
+          returnType: void
+''');
+  }
+
+  test_defaultValue_genericFunctionType() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A();
+}
+class B {
+  void foo({a: const A<Function()>()}) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @34
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+          methods
+            foo @45
+              reference: <testLibraryFragment>::@class::B::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                optionalNamed default a @50
+                  reference: <testLibraryFragment>::@class::B::@method::foo::@parameter::a
+                  type: dynamic
+                  constantInitializer
+                    InstanceCreationExpression
+                      keyword: const @53
+                      constructorName: ConstructorName
+                        type: NamedType
+                          name: A @59
+                          typeArguments: TypeArgumentList
+                            leftBracket: < @60
+                            arguments
+                              GenericFunctionType
+                                functionKeyword: Function @61
+                                parameters: FormalParameterList
+                                  leftParenthesis: ( @69
+                                  rightParenthesis: ) @70
+                                declaredElement: GenericFunctionTypeElement
+                                  parameters
+                                  returnType: dynamic
+                                  type: dynamic Function()
+                                type: dynamic Function()
+                            rightBracket: > @71
+                          element: <testLibraryFragment>::@class::A
+                          type: A<dynamic Function()>
+                        staticElement: ConstructorMember
+                          base: <testLibraryFragment>::@class::A::@constructor::new
+                          substitution: {T: dynamic Function()}
+                      argumentList: ArgumentList
+                        leftParenthesis: ( @72
+                        rightParenthesis: ) @73
+                      staticType: A<dynamic Function()>
+              returnType: void
+''');
+  }
+
+  test_defaultValue_inFunctionTypedFormalParameter() async {
+    var library = await buildLibrary('''
+void f( g({a: 0 is int}) ) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional g @8
+              type: dynamic Function({dynamic a})
+              parameters
+                optionalNamed a @11
+                  type: dynamic
+          returnType: void
+''');
+  }
+
+  test_defaultValue_methodMember() async {
+    var library = await buildLibrary('''
+void f([Comparator<T> compare = Comparable.compare]) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalPositional default compare @22
+              type: int Function(InvalidType, InvalidType)
+                alias: dart:core::<fragment>::@typeAlias::Comparator
+                  typeArguments
+                    InvalidType
+              constantInitializer
+                PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: Comparable @32
+                    staticElement: dart:core::<fragment>::@class::Comparable
+                    staticType: null
+                  period: . @42
+                  identifier: SimpleIdentifier
+                    token: compare @43
+                    staticElement: dart:core::<fragment>::@class::Comparable::@method::compare
+                    staticType: int Function(Comparable<dynamic>, Comparable<dynamic>)
+                  staticElement: dart:core::<fragment>::@class::Comparable::@method::compare
+                  staticType: int Function(Comparable<dynamic>, Comparable<dynamic>)
+          returnType: void
+''');
+  }
+
+  test_defaultValue_recordLiteral_named() async {
+    var library = await buildLibrary('''
+void f({({int f1, bool f2}) x = (f1: 1, f2: true)}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalNamed default x @28
+              reference: <testLibraryFragment>::@function::f::@parameter::x
+              type: ({int f1, bool f2})
+              constantInitializer
+                RecordLiteral
+                  leftParenthesis: ( @32
+                  fields
+                    NamedExpression
+                      name: Label
+                        label: SimpleIdentifier
+                          token: f1 @33
+                          staticElement: <null>
+                          staticType: null
+                        colon: : @35
+                      expression: IntegerLiteral
+                        literal: 1 @37
+                        staticType: int
+                    NamedExpression
+                      name: Label
+                        label: SimpleIdentifier
+                          token: f2 @40
+                          staticElement: <null>
+                          staticType: null
+                        colon: : @42
+                      expression: BooleanLiteral
+                        literal: true @44
+                        staticType: bool
+                  rightParenthesis: ) @48
+                  staticType: ({int f1, bool f2})
+          returnType: void
+''');
+  }
+
+  test_defaultValue_recordLiteral_named_const() async {
+    var library = await buildLibrary('''
+void f({({int f1, bool f2}) x = const (f1: 1, f2: true)}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalNamed default x @28
+              reference: <testLibraryFragment>::@function::f::@parameter::x
+              type: ({int f1, bool f2})
+              constantInitializer
+                RecordLiteral
+                  constKeyword: const @32
+                  leftParenthesis: ( @38
+                  fields
+                    NamedExpression
+                      name: Label
+                        label: SimpleIdentifier
+                          token: f1 @39
+                          staticElement: <null>
+                          staticType: null
+                        colon: : @41
+                      expression: IntegerLiteral
+                        literal: 1 @43
+                        staticType: int
+                    NamedExpression
+                      name: Label
+                        label: SimpleIdentifier
+                          token: f2 @46
+                          staticElement: <null>
+                          staticType: null
+                        colon: : @48
+                      expression: BooleanLiteral
+                        literal: true @50
+                        staticType: bool
+                  rightParenthesis: ) @54
+                  staticType: ({int f1, bool f2})
+          returnType: void
+''');
+  }
+
+  test_defaultValue_recordLiteral_positional() async {
+    var library = await buildLibrary('''
+void f({(int, bool) x = (1, true)}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalNamed default x @20
+              reference: <testLibraryFragment>::@function::f::@parameter::x
+              type: (int, bool)
+              constantInitializer
+                RecordLiteral
+                  leftParenthesis: ( @24
+                  fields
+                    IntegerLiteral
+                      literal: 1 @25
+                      staticType: int
+                    BooleanLiteral
+                      literal: true @28
+                      staticType: bool
+                  rightParenthesis: ) @32
+                  staticType: (int, bool)
+          returnType: void
+''');
+  }
+
+  void test_defaultValue_recordLiteral_positional_const() async {
+    var library = await buildLibrary('''
+void f({(int, bool) x = const (1, true)}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalNamed default x @20
+              reference: <testLibraryFragment>::@function::f::@parameter::x
+              type: (int, bool)
+              constantInitializer
+                RecordLiteral
+                  constKeyword: const @24
+                  leftParenthesis: ( @30
+                  fields
+                    IntegerLiteral
+                      literal: 1 @31
+                      staticType: int
+                    BooleanLiteral
+                      literal: true @34
+                      staticType: bool
+                  rightParenthesis: ) @38
+                  staticType: (int, bool)
+          returnType: void
+''');
+  }
+
+  test_defaultValue_refersToExtension_method_inside() async {
+    var library = await buildLibrary('''
+class A {}
+extension E on A {
+  static void f() {}
+  static void g([Object p = f]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      extensions
+        E @21
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          extendedType: A
+          methods
+            static f @44
+              reference: <testLibraryFragment>::@extension::E::@method::f
+              enclosingElement: <testLibraryFragment>::@extension::E
+              returnType: void
+            static g @65
+              reference: <testLibraryFragment>::@extension::E::@method::g
+              enclosingElement: <testLibraryFragment>::@extension::E
+              parameters
+                optionalPositional default p @75
+                  type: Object
+                  constantInitializer
+                    SimpleIdentifier
+                      token: f @79
+                      staticElement: <testLibraryFragment>::@extension::E::@method::f
+                      staticType: void Function()
+              returnType: void
+''');
+  }
+
+  test_defaultValue_refersToGenericClass() async {
+    var library = await buildLibrary('''
+class B<T1, T2> {
+  const B();
+}
+class C {
+  void foo([B<int, double> b = const B()]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @6
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @8
+              defaultType: dynamic
+            covariant T2 @12
+              defaultType: dynamic
+          constructors
+            const @26
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @39
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            foo @50
+              reference: <testLibraryFragment>::@class::C::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default b @70
+                  type: B<int, double>
+                  constantInitializer
+                    InstanceCreationExpression
+                      keyword: const @74
+                      constructorName: ConstructorName
+                        type: NamedType
+                          name: B @80
+                          element: <testLibraryFragment>::@class::B
+                          type: B<int, double>
+                        staticElement: ConstructorMember
+                          base: <testLibraryFragment>::@class::B::@constructor::new
+                          substitution: {T1: int, T2: double}
+                      argumentList: ArgumentList
+                        leftParenthesis: ( @81
+                        rightParenthesis: ) @82
+                      staticType: B<int, double>
+              returnType: void
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_constructor() async {
+    var library = await buildLibrary('''
+class B<T> {
+  const B();
+}
+class C<T> {
+  const C([B<T> b = const B()]);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @6
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @34
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @36
+              defaultType: dynamic
+          constructors
+            const @49
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default b @57
+                  type: B<T>
+                  constantInitializer
+                    InstanceCreationExpression
+                      keyword: const @61
+                      constructorName: ConstructorName
+                        type: NamedType
+                          name: B @67
+                          element: <testLibraryFragment>::@class::B
+                          type: B<Never>
+                        staticElement: ConstructorMember
+                          base: <testLibraryFragment>::@class::B::@constructor::new
+                          substitution: {T: Never}
+                      argumentList: ArgumentList
+                        leftParenthesis: ( @68
+                        rightParenthesis: ) @69
+                      staticType: B<Never>
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_constructor2() async {
+    var library = await buildLibrary('''
+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 B()]);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class A @15
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @17
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @29
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @31
+              defaultType: dynamic
+          interfaces
+            A<T>
+          constructors
+            const @60
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @73
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @75
+              defaultType: dynamic
+          interfaces
+            A<Iterable<T>>
+          constructors
+            const @114
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default a @122
+                  type: A<T>
+                  constantInitializer
+                    InstanceCreationExpression
+                      keyword: const @126
+                      constructorName: ConstructorName
+                        type: NamedType
+                          name: B @132
+                          element: <testLibraryFragment>::@class::B
+                          type: B<Never>
+                        staticElement: ConstructorMember
+                          base: <testLibraryFragment>::@class::B::@constructor::new
+                          substitution: {T: Never}
+                      argumentList: ArgumentList
+                        leftParenthesis: ( @133
+                        rightParenthesis: ) @134
+                      staticType: B<Never>
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_functionG() async {
+    var library = await buildLibrary('''
+class B<T> {
+  const B();
+}
+void foo<T>([B<T> b = const B()]) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @6
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+      functions
+        foo @33
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @37
+              defaultType: dynamic
+          parameters
+            optionalPositional default b @46
+              type: B<T>
+              constantInitializer
+                InstanceCreationExpression
+                  keyword: const @50
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: B @56
+                      element: <testLibraryFragment>::@class::B
+                      type: B<Never>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@class::B::@constructor::new
+                      substitution: {T: Never}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @57
+                    rightParenthesis: ) @58
+                  staticType: B<Never>
+          returnType: void
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_methodG() async {
+    var library = await buildLibrary('''
+class B<T> {
+  const B();
+}
+class C {
+  void foo<T>([B<T> b = const B()]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @6
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @34
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            foo @45
+              reference: <testLibraryFragment>::@class::C::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              typeParameters
+                covariant T @49
+                  defaultType: dynamic
+              parameters
+                optionalPositional default b @58
+                  type: B<T>
+                  constantInitializer
+                    InstanceCreationExpression
+                      keyword: const @62
+                      constructorName: ConstructorName
+                        type: NamedType
+                          name: B @68
+                          element: <testLibraryFragment>::@class::B
+                          type: B<Never>
+                        staticElement: ConstructorMember
+                          base: <testLibraryFragment>::@class::B::@constructor::new
+                          substitution: {T: Never}
+                      argumentList: ArgumentList
+                        leftParenthesis: ( @69
+                        rightParenthesis: ) @70
+                      staticType: B<Never>
+              returnType: void
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_methodG_classG() async {
+    var library = await buildLibrary('''
+class B<T1, T2> {
+  const B();
+}
+class C<E1> {
+  void foo<E2>([B<E1, E2> b = const B()]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @6
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @8
+              defaultType: dynamic
+            covariant T2 @12
+              defaultType: dynamic
+          constructors
+            const @26
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @39
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant E1 @41
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            foo @54
+              reference: <testLibraryFragment>::@class::C::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              typeParameters
+                covariant E2 @58
+                  defaultType: dynamic
+              parameters
+                optionalPositional default b @73
+                  type: B<E1, E2>
+                  constantInitializer
+                    InstanceCreationExpression
+                      keyword: const @77
+                      constructorName: ConstructorName
+                        type: NamedType
+                          name: B @83
+                          element: <testLibraryFragment>::@class::B
+                          type: B<Never, Never>
+                        staticElement: ConstructorMember
+                          base: <testLibraryFragment>::@class::B::@constructor::new
+                          substitution: {T1: Never, T2: Never}
+                      argumentList: ArgumentList
+                        leftParenthesis: ( @84
+                        rightParenthesis: ) @85
+                      staticType: B<Never, Never>
+              returnType: void
+''');
+  }
+
+  test_defaultValue_refersToGenericClass_methodNG() async {
+    var library = await buildLibrary('''
+class B<T> {
+  const B();
+}
+class C<T> {
+  void foo([B<T> b = const B()]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @6
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @34
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @36
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            foo @48
+              reference: <testLibraryFragment>::@class::C::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default b @58
+                  type: B<T>
+                  constantInitializer
+                    InstanceCreationExpression
+                      keyword: const @62
+                      constructorName: ConstructorName
+                        type: NamedType
+                          name: B @68
+                          element: <testLibraryFragment>::@class::B
+                          type: B<Never>
+                        staticElement: ConstructorMember
+                          base: <testLibraryFragment>::@class::B::@constructor::new
+                          substitution: {T: Never}
+                      argumentList: ArgumentList
+                        leftParenthesis: ( @69
+                        rightParenthesis: ) @70
+                      staticType: B<Never>
+              returnType: void
+''');
+  }
+}
+
+@reflectiveTest
+class DefaultValueElementTest_fromBytes extends DefaultValueElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class DefaultValueElementTest_keepLinking extends DefaultValueElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/duplicate_declaration_test.dart b/pkg/analyzer/test/src/summary/elements/duplicate_declaration_test.dart
new file mode 100644
index 0000000..dd2b41a
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/duplicate_declaration_test.dart
@@ -0,0 +1,1064 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(DuplicateDeclarationElementTest_keepLinking);
+    defineReflectiveTests(DuplicateDeclarationElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class DuplicateDeclarationElementTest extends ElementsBaseTest {
+  test_duplicateDeclaration_class() async {
+    var library = await buildLibrary(r'''
+class A {
+  static const f01 = 0;
+  static const f02 = f01;
+}
+
+class A {
+  static const f11 = 0;
+  static const f12 = f11;
+}
+
+class A {
+  static const f21 = 0;
+  static const f22 = f21;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A::@def::0
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const f01 @25
+              reference: <testLibraryFragment>::@class::A::@def::0::@field::f01
+              enclosingElement: <testLibraryFragment>::@class::A::@def::0
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @31
+                  staticType: int
+            static const f02 @49
+              reference: <testLibraryFragment>::@class::A::@def::0::@field::f02
+              enclosingElement: <testLibraryFragment>::@class::A::@def::0
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                SimpleIdentifier
+                  token: f01 @55
+                  staticElement: <testLibraryFragment>::@class::A::@def::0::@getter::f01
+                  staticType: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@def::0::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A::@def::0
+          accessors
+            synthetic static get f01 @-1
+              reference: <testLibraryFragment>::@class::A::@def::0::@getter::f01
+              enclosingElement: <testLibraryFragment>::@class::A::@def::0
+              returnType: int
+            synthetic static get f02 @-1
+              reference: <testLibraryFragment>::@class::A::@def::0::@getter::f02
+              enclosingElement: <testLibraryFragment>::@class::A::@def::0
+              returnType: int
+        class A @69
+          reference: <testLibraryFragment>::@class::A::@def::1
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const f11 @88
+              reference: <testLibraryFragment>::@class::A::@def::1::@field::f11
+              enclosingElement: <testLibraryFragment>::@class::A::@def::1
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @94
+                  staticType: int
+            static const f12 @112
+              reference: <testLibraryFragment>::@class::A::@def::1::@field::f12
+              enclosingElement: <testLibraryFragment>::@class::A::@def::1
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                SimpleIdentifier
+                  token: f11 @118
+                  staticElement: <testLibraryFragment>::@class::A::@def::1::@getter::f11
+                  staticType: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@def::1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A::@def::1
+          accessors
+            synthetic static get f11 @-1
+              reference: <testLibraryFragment>::@class::A::@def::1::@getter::f11
+              enclosingElement: <testLibraryFragment>::@class::A::@def::1
+              returnType: int
+            synthetic static get f12 @-1
+              reference: <testLibraryFragment>::@class::A::@def::1::@getter::f12
+              enclosingElement: <testLibraryFragment>::@class::A::@def::1
+              returnType: int
+        class A @132
+          reference: <testLibraryFragment>::@class::A::@def::2
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const f21 @151
+              reference: <testLibraryFragment>::@class::A::@def::2::@field::f21
+              enclosingElement: <testLibraryFragment>::@class::A::@def::2
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @157
+                  staticType: int
+            static const f22 @175
+              reference: <testLibraryFragment>::@class::A::@def::2::@field::f22
+              enclosingElement: <testLibraryFragment>::@class::A::@def::2
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                SimpleIdentifier
+                  token: f21 @181
+                  staticElement: <testLibraryFragment>::@class::A::@def::2::@getter::f21
+                  staticType: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@def::2::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A::@def::2
+          accessors
+            synthetic static get f21 @-1
+              reference: <testLibraryFragment>::@class::A::@def::2::@getter::f21
+              enclosingElement: <testLibraryFragment>::@class::A::@def::2
+              returnType: int
+            synthetic static get f22 @-1
+              reference: <testLibraryFragment>::@class::A::@def::2::@getter::f22
+              enclosingElement: <testLibraryFragment>::@class::A::@def::2
+              returnType: int
+''');
+  }
+
+  test_duplicateDeclaration_class_constructor_unnamed() async {
+    var library = await buildLibrary(r'''
+class A {
+  A.named();
+  A.named();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            named @14
+              reference: <testLibraryFragment>::@class::A::@constructor::named::@def::0
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 13
+              nameEnd: 19
+            named @27
+              reference: <testLibraryFragment>::@class::A::@constructor::named::@def::1
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 26
+              nameEnd: 32
+''');
+  }
+
+  test_duplicateDeclaration_class_field() async {
+    var library = await buildLibrary(r'''
+class A {
+  int foo;
+  double foo;
+}
+''');
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            foo @16
+              reference: <testLibraryFragment>::@class::A::@field::foo::@def::0
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+            foo @30
+              reference: <testLibraryFragment>::@class::A::@field::foo::@def::1
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: double
+              id: field_1
+              getter: getter_1
+              setter: setter_1
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo::@def::0
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo::@def::0
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo::@def::1
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: double
+              id: getter_1
+              variable: field_1
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo::@def::1
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: double
+              returnType: void
+              id: setter_1
+              variable: field_1
+''');
+  }
+
+  test_duplicateDeclaration_class_method() async {
+    var library = await buildLibrary(r'''
+class A {
+  void foo() {}
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @17
+              reference: <testLibraryFragment>::@class::A::@method::foo::@def::0
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+            foo @33
+              reference: <testLibraryFragment>::@class::A::@method::foo::@def::1
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_classTypeAlias() async {
+    var library = await buildLibrary(r'''
+class A {}
+class B {}
+class X = A with M;
+class X = B with M;
+mixin M {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @17
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class alias X @28
+          reference: <testLibraryFragment>::@class::X::@def::0
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          mixins
+            M
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@def::0::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X::@def::0
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+        class alias X @48
+          reference: <testLibraryFragment>::@class::X::@def::1
+          enclosingElement: <testLibraryFragment>
+          supertype: B
+          mixins
+            M
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@def::1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X::@def::1
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::B::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::B::@constructor::new
+      mixins
+        mixin M @68
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_duplicateDeclaration_enum() async {
+    var library = await buildLibrary(r'''
+enum E {a, b}
+enum E {c, d, e}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E::@def::0
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant a @8
+              reference: <testLibraryFragment>::@enum::E::@def::0::@field::a
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E::@def::0
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant b @11
+              reference: <testLibraryFragment>::@enum::E::@def::0::@field::b
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E::@def::0
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@def::0::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: a @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@def::0::@getter::a
+                      staticType: E
+                    SimpleIdentifier
+                      token: b @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@def::0::@getter::b
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@enum::E::@def::0::@getter::a
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
+              returnType: E
+            synthetic static get b @-1
+              reference: <testLibraryFragment>::@enum::E::@def::0::@getter::b
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@def::0::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
+              returnType: List<E>
+        enum E @19
+          reference: <testLibraryFragment>::@enum::E::@def::1
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant c @22
+              reference: <testLibraryFragment>::@enum::E::@def::1::@field::c
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E::@def::0
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant d @25
+              reference: <testLibraryFragment>::@enum::E::@def::1::@field::d
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E::@def::0
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant e @28
+              reference: <testLibraryFragment>::@enum::E::@def::1::@field::e
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E::@def::0
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@def::1::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: c @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@def::1::@getter::c
+                      staticType: E
+                    SimpleIdentifier
+                      token: d @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@def::1::@getter::d
+                      staticType: E
+                    SimpleIdentifier
+                      token: e @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@def::1::@getter::e
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@def::1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
+          accessors
+            synthetic static get c @-1
+              reference: <testLibraryFragment>::@enum::E::@def::1::@getter::c
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
+              returnType: E
+            synthetic static get d @-1
+              reference: <testLibraryFragment>::@enum::E::@def::1::@getter::d
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
+              returnType: E
+            synthetic static get e @-1
+              reference: <testLibraryFragment>::@enum::E::@def::1::@getter::e
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@def::1::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
+              returnType: List<E>
+''');
+  }
+
+  test_duplicateDeclaration_extension() async {
+    var library = await buildLibrary(r'''
+extension E on int {}
+extension E on int {
+  static var x;
+}
+extension E on int {
+  static var y = 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        E @10
+          reference: <testLibraryFragment>::@extension::E::@def::0
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+        E @32
+          reference: <testLibraryFragment>::@extension::E::@def::1
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          fields
+            static x @56
+              reference: <testLibraryFragment>::@extension::E::@def::1::@field::x
+              enclosingElement: <testLibraryFragment>::@extension::E::@def::1
+              type: dynamic
+          accessors
+            synthetic static get x @-1
+              reference: <testLibraryFragment>::@extension::E::@def::1::@getter::x
+              enclosingElement: <testLibraryFragment>::@extension::E::@def::1
+              returnType: dynamic
+            synthetic static set x= @-1
+              reference: <testLibraryFragment>::@extension::E::@def::1::@setter::x
+              enclosingElement: <testLibraryFragment>::@extension::E::@def::1
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+        E @71
+          reference: <testLibraryFragment>::@extension::E::@def::2
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          fields
+            static y @95
+              reference: <testLibraryFragment>::@extension::E::@def::2::@field::y
+              enclosingElement: <testLibraryFragment>::@extension::E::@def::2
+              type: int
+              shouldUseTypeForInitializerInference: false
+          accessors
+            synthetic static get y @-1
+              reference: <testLibraryFragment>::@extension::E::@def::2::@getter::y
+              enclosingElement: <testLibraryFragment>::@extension::E::@def::2
+              returnType: int
+            synthetic static set y= @-1
+              reference: <testLibraryFragment>::@extension::E::@def::2::@setter::y
+              enclosingElement: <testLibraryFragment>::@extension::E::@def::2
+              parameters
+                requiredPositional _y @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_extensionType() async {
+    var library = await buildLibrary(r'''
+extension type E(int it) {}
+extension type E(double it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        E @15
+          reference: <testLibraryFragment>::@extensionType::E::@def::0
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::E::@def::0::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::E::@def::0::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::E::@def::0::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::0
+              type: int
+          constructors
+            @15
+              reference: <testLibraryFragment>::@extensionType::E::@def::0::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::0
+              parameters
+                requiredPositional final this.it @21
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::E::@def::0::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::E::@def::0::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::0
+              returnType: int
+        E @43
+          reference: <testLibraryFragment>::@extensionType::E::@def::1
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::E::@def::1::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::E::@def::1::@constructor::new
+          typeErasure: double
+          fields
+            final it @52
+              reference: <testLibraryFragment>::@extensionType::E::@def::1::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::1
+              type: double
+          constructors
+            @43
+              reference: <testLibraryFragment>::@extensionType::E::@def::1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::1
+              parameters
+                requiredPositional final this.it @52
+                  type: double
+                  field: <testLibraryFragment>::@extensionType::E::@def::1::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::E::@def::1::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::1
+              returnType: double
+''');
+  }
+
+  test_duplicateDeclaration_function() async {
+    var library = await buildLibrary(r'''
+void f() {}
+void f(int a) {}
+void f([int b, double c]) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f::@def::0
+          enclosingElement: <testLibraryFragment>
+          returnType: void
+        f @17
+          reference: <testLibraryFragment>::@function::f::@def::1
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @23
+              type: int
+          returnType: void
+        f @34
+          reference: <testLibraryFragment>::@function::f::@def::2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalPositional default b @41
+              type: int
+            optionalPositional default c @51
+              type: double
+          returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_function_namedParameter() async {
+    var library = await buildLibrary(r'''
+void f({int a, double a}) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalNamed default a @12
+              reference: <testLibraryFragment>::@function::f::@parameter::a::@def::0
+              type: int
+            optionalNamed default a @22
+              reference: <testLibraryFragment>::@function::f::@parameter::a::@def::1
+              type: double
+          returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_functionTypeAlias() async {
+    var library = await buildLibrary(r'''
+typedef void F();
+typedef void F(int a);
+typedef void F([int b, double c]);
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @13
+          reference: <testLibraryFragment>::@typeAlias::F::@def::0
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+        functionTypeAliasBased F @31
+          reference: <testLibraryFragment>::@typeAlias::F::@def::1
+          aliasedType: void Function(int)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @37
+                type: int
+            returnType: void
+        functionTypeAliasBased F @54
+          reference: <testLibraryFragment>::@typeAlias::F::@def::2
+          aliasedType: void Function([int, double])
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              optionalPositional b @61
+                type: int
+              optionalPositional c @71
+                type: double
+            returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_mixin() async {
+    var library = await buildLibrary(r'''
+mixin A {}
+mixin A {
+  var x;
+}
+mixin A {
+  var y = 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @6
+          reference: <testLibraryFragment>::@mixin::A::@def::0
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+        mixin A @17
+          reference: <testLibraryFragment>::@mixin::A::@def::1
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            x @27
+              reference: <testLibraryFragment>::@mixin::A::@def::1::@field::x
+              enclosingElement: <testLibraryFragment>::@mixin::A::@def::1
+              type: dynamic
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@mixin::A::@def::1::@getter::x
+              enclosingElement: <testLibraryFragment>::@mixin::A::@def::1
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@mixin::A::@def::1::@setter::x
+              enclosingElement: <testLibraryFragment>::@mixin::A::@def::1
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+        mixin A @38
+          reference: <testLibraryFragment>::@mixin::A::@def::2
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            y @48
+              reference: <testLibraryFragment>::@mixin::A::@def::2::@field::y
+              enclosingElement: <testLibraryFragment>::@mixin::A::@def::2
+              type: int
+              shouldUseTypeForInitializerInference: false
+          accessors
+            synthetic get y @-1
+              reference: <testLibraryFragment>::@mixin::A::@def::2::@getter::y
+              enclosingElement: <testLibraryFragment>::@mixin::A::@def::2
+              returnType: int
+            synthetic set y= @-1
+              reference: <testLibraryFragment>::@mixin::A::@def::2::@setter::y
+              enclosingElement: <testLibraryFragment>::@mixin::A::@def::2
+              parameters
+                requiredPositional _y @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_duplicateDeclaration_topLevelVariable() async {
+    var library = await buildLibrary(r'''
+bool x;
+var x;
+final x = 1;
+var x = 2.3;
+''');
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static x @5
+          reference: <testLibraryFragment>::@topLevelVariable::x::@def::0
+          enclosingElement: <testLibraryFragment>
+          type: bool
+          id: variable_0
+          getter: getter_0
+          setter: setter_0
+        static x @12
+          reference: <testLibraryFragment>::@topLevelVariable::x::@def::1
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          id: variable_1
+          getter: getter_1
+          setter: setter_1
+        static final x @21
+          reference: <testLibraryFragment>::@topLevelVariable::x::@def::2
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          id: variable_2
+          getter: getter_2
+        static x @32
+          reference: <testLibraryFragment>::@topLevelVariable::x::@def::3
+          enclosingElement: <testLibraryFragment>
+          type: double
+          shouldUseTypeForInitializerInference: false
+          id: variable_3
+          getter: getter_3
+          setter: setter_2
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x::@def::0
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+          id: getter_0
+          variable: variable_0
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x::@def::0
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: bool
+          returnType: void
+          id: setter_0
+          variable: variable_0
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x::@def::1
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+          id: getter_1
+          variable: variable_1
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x::@def::1
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: dynamic
+          returnType: void
+          id: setter_1
+          variable: variable_1
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x::@def::2
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_2
+          variable: variable_2
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x::@def::3
+          enclosingElement: <testLibraryFragment>
+          returnType: double
+          id: getter_3
+          variable: variable_3
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x::@def::2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: double
+          returnType: void
+          id: setter_2
+          variable: variable_3
+''');
+  }
+
+  test_duplicateDeclaration_unit_getter() async {
+    var library = await buildLibrary(r'''
+int get foo {}
+double get foo {}
+''');
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: double
+          id: variable_0
+          getter: getter_0
+      accessors
+        static get foo @8
+          reference: <testLibraryFragment>::@getter::foo::@def::0
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_1
+          variable: variable_0
+        static get foo @26
+          reference: <testLibraryFragment>::@getter::foo::@def::1
+          enclosingElement: <testLibraryFragment>
+          returnType: double
+          id: getter_0
+          variable: variable_0
+''');
+  }
+
+  test_duplicateDeclaration_unit_setter() async {
+    var library = await buildLibrary(r'''
+set foo(int _) {}
+set foo(double _) {}
+''');
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: double
+          id: variable_0
+          setter: setter_0
+      accessors
+        static set foo= @4
+          reference: <testLibraryFragment>::@setter::foo::@def::0
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _ @12
+              type: int
+          returnType: void
+          id: setter_1
+          variable: variable_0
+        static set foo= @22
+          reference: <testLibraryFragment>::@setter::foo::@def::1
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _ @33
+              type: double
+          returnType: void
+          id: setter_0
+          variable: variable_0
+''');
+  }
+}
+
+@reflectiveTest
+class DuplicateDeclarationElementTest_fromBytes
+    extends DuplicateDeclarationElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class DuplicateDeclarationElementTest_keepLinking
+    extends DuplicateDeclarationElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/enum_test.dart b/pkg/analyzer/test/src/summary/elements/enum_test.dart
new file mode 100644
index 0000000..c547132
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/enum_test.dart
@@ -0,0 +1,11874 @@
+// Copyright (c) 2024, 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/element.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../element_text.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(EnumElementTest_keepLinking);
+    defineReflectiveTests(EnumElementTest_fromBytes);
+    defineReflectiveTests(EnumElementTest_augmentation_keepLinking);
+    defineReflectiveTests(EnumElementTest_augmentation_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class EnumElementTest extends ElementsBaseTest {
+  test_codeRange_enum() async {
+    var library = await buildLibrary('''
+enum E {
+  aaa, bbb, ccc
+}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 26
+          supertype: Enum
+          fields
+            static const enumConstant aaa @11
+              reference: <testLibraryFragment>::@enum::E::@field::aaa
+              enclosingElement: <testLibraryFragment>::@enum::E
+              codeOffset: 11
+              codeLength: 3
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant bbb @16
+              reference: <testLibraryFragment>::@enum::E::@field::bbb
+              enclosingElement: <testLibraryFragment>::@enum::E
+              codeOffset: 16
+              codeLength: 3
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant ccc @21
+              reference: <testLibraryFragment>::@enum::E::@field::ccc
+              enclosingElement: <testLibraryFragment>::@enum::E
+              codeOffset: 21
+              codeLength: 3
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: aaa @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::aaa
+                      staticType: E
+                    SimpleIdentifier
+                      token: bbb @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::bbb
+                      staticType: E
+                    SimpleIdentifier
+                      token: ccc @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::ccc
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get aaa @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::aaa
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get bbb @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::bbb
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get ccc @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::ccc
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_constant_inference() async {
+    var library = await buildLibrary(r'''
+enum E<T> {
+  int(1), string('2');
+  const E(T a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            static const enumConstant int @14
+              reference: <testLibraryFragment>::@enum::E::@field::int
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E<int>
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E<int>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@enum::E::@constructor::new
+                      substitution: {T: int}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      IntegerLiteral
+                        literal: 1 @18
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticType: E<int>
+            static const enumConstant string @22
+              reference: <testLibraryFragment>::@enum::E::@field::string
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E<String>
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E<String>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@enum::E::@constructor::new
+                      substitution: {T: String}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleStringLiteral
+                        literal: '2' @29
+                    rightParenthesis: ) @0
+                  staticType: E<String>
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: int @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::int
+                      staticType: E<int>
+                    SimpleIdentifier
+                      token: string @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::string
+                      staticType: E<String>
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+          constructors
+            const @43
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                requiredPositional a @47
+                  type: T
+          accessors
+            synthetic static get int @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::int
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E<int>
+            synthetic static get string @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::string
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E<String>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+''');
+  }
+
+  /// Test that a constant named `_name` renames the synthetic `name` field.
+  test_enum_constant_name() async {
+    var library = await buildLibrary(r'''
+enum E {
+  _name;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant _name @11
+              reference: <testLibraryFragment>::@enum::E::@field::_name
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: _name @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::_name
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get _name @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::_name
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_constant_typeArguments() async {
+    var library = await buildLibrary(r'''
+enum E<T> {
+  v<double>(42);
+  const E(T a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            static const enumConstant v @14
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E<double>
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      typeArguments: TypeArgumentList
+                        leftBracket: < @15
+                        arguments
+                          NamedType
+                            name: double @16
+                            element: dart:core::<fragment>::@class::double
+                            type: double
+                        rightBracket: > @22
+                      element: <testLibraryFragment>::@enum::E
+                      type: E<double>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@enum::E::@constructor::new
+                      substitution: {T: double}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      IntegerLiteral
+                        literal: 42 @24
+                        staticType: double
+                    rightParenthesis: ) @0
+                  staticType: E<double>
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E<double>
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+          constructors
+            const @37
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                requiredPositional a @41
+                  type: T
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E<double>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_constant_underscore() async {
+    var library = await buildLibrary('''
+enum E {
+  _
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant _ @11
+              reference: <testLibraryFragment>::@enum::E::@field::_
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: _ @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::_
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get _ @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::_
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_factory_named() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  factory E.named() => v;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            factory named @26
+              reference: <testLibraryFragment>::@enum::E::@constructor::named
+              enclosingElement: <testLibraryFragment>::@enum::E
+              periodOffset: 25
+              nameEnd: 31
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_factory_unnamed() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  factory E() => v;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            factory @24
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_fieldFormal_functionTyped_withReturnType() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  final x;
+  const E(int this.x(double a));
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+            final x @22
+              reference: <testLibraryFragment>::@enum::E::@field::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: dynamic
+          constructors
+            const @33
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                requiredPositional final this.x @44
+                  type: int Function(double)
+                  parameters
+                    requiredPositional a @53
+                      type: double
+                  field: <testLibraryFragment>::@enum::E::@field::x
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: dynamic
+''');
+  }
+
+  test_enum_constructor_fieldFormal_multiple_matching_fields() async {
+    var library = await buildLibrary('''
+enum E {
+  v;
+  final int x;
+  final String x;
+  const E(this.x);
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+            final x @26
+              reference: <testLibraryFragment>::@enum::E::@field::x::@def::0
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: int
+            final x @44
+              reference: <testLibraryFragment>::@enum::E::@field::x::@def::1
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: String
+          constructors
+            const @55
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                requiredPositional final this.x @62
+                  type: int
+                  field: <testLibraryFragment>::@enum::E::@field::x::@def::0
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::x::@def::0
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: int
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::x::@def::1
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: String
+''');
+  }
+
+  test_enum_constructor_fieldFormal_no_matching_field() async {
+    var library = await buildLibrary('''
+enum E {
+  v;
+  const E(this.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            const @22
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                requiredPositional final this.x @29
+                  type: dynamic
+                  field: <null>
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_fieldFormal_optionalNamed_defaultValue() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  final int x;
+  const E({this.x = 1 + 2});
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+            final x @26
+              reference: <testLibraryFragment>::@enum::E::@field::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: int
+          constructors
+            const @37
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                optionalNamed default final this.x @45
+                  reference: <testLibraryFragment>::@enum::E::@constructor::new::@parameter::x
+                  type: int
+                  constantInitializer
+                    BinaryExpression
+                      leftOperand: IntegerLiteral
+                        literal: 1 @49
+                        staticType: int
+                      operator: + @51
+                      rightOperand: IntegerLiteral
+                        literal: 2 @53
+                        staticType: int
+                      staticElement: dart:core::<fragment>::@class::num::@method::+
+                      staticInvokeType: num Function(num)
+                      staticType: int
+                  field: <testLibraryFragment>::@enum::E::@field::x
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: int
+''');
+  }
+
+  test_enum_constructor_fieldFormal_typed_typed() async {
+    var library = await buildLibrary('''
+enum E {
+  v;
+  final num x;
+  const E(int this.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+            final x @26
+              reference: <testLibraryFragment>::@enum::E::@field::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: num
+          constructors
+            const @37
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                requiredPositional final this.x @48
+                  type: int
+                  field: <testLibraryFragment>::@enum::E::@field::x
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: num
+''');
+  }
+
+  test_enum_constructor_fieldFormal_untyped_typed() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  final x;
+  E(int this.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+            final x @22
+              reference: <testLibraryFragment>::@enum::E::@field::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: dynamic
+          constructors
+            @27
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                requiredPositional final this.x @38
+                  type: int
+                  field: <testLibraryFragment>::@enum::E::@field::x
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: dynamic
+''');
+  }
+
+  test_enum_constructor_fieldFormal_untyped_untyped() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  final x;
+  E(this.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+            final x @22
+              reference: <testLibraryFragment>::@enum::E::@field::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: dynamic
+          constructors
+            @27
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                requiredPositional final this.x @34
+                  type: dynamic
+                  field: <testLibraryFragment>::@enum::E::@field::x
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: dynamic
+''');
+  }
+
+  test_enum_constructor_generative_named() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v.named(42);
+  const E.named(int a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    period: . @0
+                    name: SimpleIdentifier
+                      token: named @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@constructor::named
+                      staticType: null
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::named
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      IntegerLiteral
+                        literal: 42 @19
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            const named @34
+              reference: <testLibraryFragment>::@enum::E::@constructor::named
+              enclosingElement: <testLibraryFragment>::@enum::E
+              periodOffset: 33
+              nameEnd: 39
+              parameters
+                requiredPositional a @44
+                  type: int
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_generative_unnamed() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v(42);
+  const E(int a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      IntegerLiteral
+                        literal: 42 @13
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            const @26
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                requiredPositional a @32
+                  type: int
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_constructor_initializer() async {
+    var library = await buildLibrary(r'''
+enum E<T> {
+  v;
+  final int x;
+  const E(T? a) : assert(a is T), x = 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            static const enumConstant v @14
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E<dynamic>
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E<dynamic>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@enum::E::@constructor::new
+                      substitution: {T: dynamic}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E<dynamic>
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E<dynamic>
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+            final x @29
+              reference: <testLibraryFragment>::@enum::E::@field::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: int
+          constructors
+            const @40
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                requiredPositional a @45
+                  type: T?
+              constantInitializers
+                AssertInitializer
+                  assertKeyword: assert @50
+                  leftParenthesis: ( @56
+                  condition: IsExpression
+                    expression: SimpleIdentifier
+                      token: a @57
+                      staticElement: <testLibraryFragment>::@enum::E::@constructor::new::@parameter::a
+                      staticType: T?
+                    isOperator: is @59
+                    type: NamedType
+                      name: T @62
+                      element: T@7
+                      type: T
+                    staticType: bool
+                  rightParenthesis: ) @63
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: x @66
+                    staticElement: <testLibraryFragment>::@enum::E::@field::x
+                    staticType: null
+                  equals: = @68
+                  expression: IntegerLiteral
+                    literal: 0 @70
+                    staticType: int
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E<dynamic>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::x
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: int
+''');
+  }
+
+  test_enum_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+enum E { v }''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @65
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * Docs\n */
+          supertype: Enum
+          fields
+            static const enumConstant v @69
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_field() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  final foo = 42;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+            final foo @22
+              reference: <testLibraryFragment>::@enum::E::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 42 @28
+                  staticType: int
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: int
+''');
+  }
+
+  test_enum_field_isPromotable() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v(null);
+  final int? _foo;
+  E(this._foo);
+}
+''');
+    configuration.forPromotableFields(
+      enumNames: {'E'},
+      fieldNames: {'_foo'},
+    );
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            final promotable _foo @33
+              reference: <testLibraryFragment>::@enum::E::@field::_foo
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: int?
+''');
+  }
+
+  test_enum_getter() async {
+    var library = await buildLibrary(r'''
+enum E{
+  v;
+  int get foo => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @10
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@enum::E::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: int
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+            get foo @23
+              reference: <testLibraryFragment>::@enum::E::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: int
+''');
+  }
+
+  test_enum_interfaces() async {
+    var library = await buildLibrary(r'''
+class I {}
+enum E implements I {
+  v;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I @6
+          reference: <testLibraryFragment>::@class::I
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I
+      enums
+        enum E @16
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          interfaces
+            I
+          fields
+            static const enumConstant v @35
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_interfaces_extensionType() async {
+    var library = await buildLibrary(r'''
+class A {}
+extension type B(int it) {}
+class C {}
+enum E implements A, B, C { v }
+''');
+    configuration
+      ..withConstructors = false
+      ..withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+        class C @45
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+      enums
+        enum E @55
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          interfaces
+            A
+            C
+          fields
+            static const enumConstant v @78
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      extensionTypes
+        B @26
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: int
+          fields
+            final it @32
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: int
+''');
+  }
+
+  test_enum_interfaces_generic() async {
+    var library = await buildLibrary(r'''
+class I<T> {}
+enum E<U> implements I<U> {
+  v;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I @6
+          reference: <testLibraryFragment>::@class::I
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I
+      enums
+        enum E @19
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U @21
+              defaultType: dynamic
+          supertype: Enum
+          interfaces
+            I<U>
+          fields
+            static const enumConstant v @44
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E<dynamic>
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E<dynamic>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@enum::E::@constructor::new
+                      substitution: {U: dynamic}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E<dynamic>
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E<dynamic>
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E<dynamic>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_interfaces_unresolved() async {
+    var library = await buildLibrary('''
+class X {}
+class Z {}
+enum E implements X, Y, Z {
+  v
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class X @6
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+        class Z @17
+          reference: <testLibraryFragment>::@class::Z
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::Z::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::Z
+      enums
+        enum E @27
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          interfaces
+            X
+            Z
+          fields
+            static const enumConstant v @52
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_method() async {
+    var library = await buildLibrary(r'''
+enum E<T> {
+  v;
+  int foo<U>(T t, U u) => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            static const enumConstant v @14
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E<dynamic>
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E<dynamic>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@enum::E::@constructor::new
+                      substitution: {T: dynamic}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E<dynamic>
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E<dynamic>
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E<dynamic>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+          methods
+            foo @23
+              reference: <testLibraryFragment>::@enum::E::@method::foo
+              enclosingElement: <testLibraryFragment>::@enum::E
+              typeParameters
+                covariant U @27
+                  defaultType: dynamic
+              parameters
+                requiredPositional t @32
+                  type: T
+                requiredPositional u @37
+                  type: U
+              returnType: int
+''');
+  }
+
+  test_enum_method_toString() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  String toString() => 'E';
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @11
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+          methods
+            toString @23
+              reference: <testLibraryFragment>::@enum::E::@method::toString
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: String
+''');
+  }
+
+  test_enum_mixins() async {
+    var library = await buildLibrary(r'''
+mixin M {}
+enum E with M {
+  v;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @16
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          mixins
+            M
+          fields
+            static const enumConstant v @29
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_enum_mixins_extensionType() async {
+    var library = await buildLibrary(r'''
+class A {}
+extension type B(int it) {}
+class C {}
+enum E with A, B, C { v }
+''');
+    configuration
+      ..withConstructors = false
+      ..withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+        class C @45
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+      enums
+        enum E @55
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          mixins
+            A
+            C
+          fields
+            static const enumConstant v @72
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      extensionTypes
+        B @26
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: int
+          fields
+            final it @32
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: int
+''');
+  }
+
+  test_enum_mixins_inference() async {
+    var library = await buildLibrary(r'''
+mixin M1<T> {}
+mixin M2<T> on M1<T> {}
+enum E with M1<int>, M2 {
+  v;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @44
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          mixins
+            M1<int>
+            M2<int>
+          fields
+            static const enumConstant v @67
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      mixins
+        mixin M1 @6
+          reference: <testLibraryFragment>::@mixin::M1
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @9
+              defaultType: dynamic
+          superclassConstraints
+            Object
+        mixin M2 @21
+          reference: <testLibraryFragment>::@mixin::M2
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @24
+              defaultType: dynamic
+          superclassConstraints
+            M1<T>
+''');
+  }
+
+  test_enum_setter() async {
+    var library = await buildLibrary(r'''
+enum E{
+  v;
+  set foo(int _) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @10
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@enum::E::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: int
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+            set foo= @19
+              reference: <testLibraryFragment>::@enum::E::@setter::foo
+              enclosingElement: <testLibraryFragment>::@enum::E
+              parameters
+                requiredPositional _ @27
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_enum_typeParameters() async {
+    var library = await buildLibrary('''
+enum E<T> {
+  v
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            static const enumConstant v @14
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E<dynamic>
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E<dynamic>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@enum::E::@constructor::new
+                      substitution: {T: dynamic}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E<dynamic>
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E<dynamic>
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E<dynamic>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_bound() async {
+    var library = await buildLibrary('''
+enum E<T extends num, U extends T> {
+  v
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        notSimplyBounded enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              bound: num
+              defaultType: num
+            covariant U @22
+              bound: T
+              defaultType: num
+          supertype: Enum
+          fields
+            static const enumConstant v @39
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E<num, num>
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E<num, num>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@enum::E::@constructor::new
+                      substitution: {T: num, U: num}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E<num, num>
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<num, num>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E<num, num>
+                  rightBracket: ] @0
+                  staticType: List<E<num, num>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E<num, num>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<num, num>>
+''');
+  }
+
+  test_enum_typeParameters_cycle_1of1() async {
+    var library = await buildLibrary('''
+enum E<T extends T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        notSimplyBounded enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              bound: dynamic
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_cycle_2of3() async {
+    var library = await buildLibrary(r'''
+enum E<T extends V, U extends num, V extends T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        notSimplyBounded enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              bound: dynamic
+              defaultType: dynamic
+            covariant U @20
+              bound: num
+              defaultType: num
+            covariant V @35
+              bound: dynamic
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic, num, dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic, num, dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic, num, dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_defaultType_cycle_genericFunctionType() async {
+    var library = await buildLibrary(r'''
+enum E<T extends void Function(E)> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        notSimplyBounded enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              bound: void Function(E<dynamic>)
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_variance_contravariant() async {
+    var library = await buildLibrary('''
+enum E<in T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            contravariant T @10
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_variance_covariant() async {
+    var library = await buildLibrary('''
+enum E<out T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @11
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_variance_invariant() async {
+    var library = await buildLibrary('''
+enum E<inout T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            invariant T @13
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+''');
+  }
+
+  test_enum_typeParameters_variance_multiple() async {
+    var library = await buildLibrary('''
+enum E<inout T, in U, out V> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            invariant T @13
+              defaultType: dynamic
+            contravariant U @19
+              defaultType: dynamic
+            covariant V @26
+              defaultType: dynamic
+          supertype: Enum
+          fields
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic, dynamic, dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic, dynamic, dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic, dynamic, dynamic>>
+''');
+  }
+
+  test_enum_value_documented() async {
+    var library = await buildLibrary('''
+enum E {
+  /**
+   * aaa
+   */
+  a,
+  /// bbb
+  b
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant a @32
+              reference: <testLibraryFragment>::@enum::E::@field::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              documentationComment: /**\n   * aaa\n   */
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant b @47
+              reference: <testLibraryFragment>::@enum::E::@field::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              documentationComment: /// bbb
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: a @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
+                      staticType: E
+                    SimpleIdentifier
+                      token: b @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get b @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enum_value_documented_withMetadata() async {
+    var library = await buildLibrary('''
+enum E {
+  /**
+   * aaa
+   */
+  @annotation
+  a,
+  /// bbb
+  @annotation
+  b,
+}
+
+const int annotation = 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant a @46
+              reference: <testLibraryFragment>::@enum::E::@field::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              documentationComment: /**\n   * aaa\n   */
+              metadata
+                Annotation
+                  atSign: @ @32
+                  name: SimpleIdentifier
+                    token: annotation @33
+                    staticElement: <testLibraryFragment>::@getter::annotation
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::annotation
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant b @75
+              reference: <testLibraryFragment>::@enum::E::@field::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              documentationComment: /// bbb
+              metadata
+                Annotation
+                  atSign: @ @61
+                  name: SimpleIdentifier
+                    token: annotation @62
+                    staticElement: <testLibraryFragment>::@getter::annotation
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::annotation
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: a @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
+                      staticType: E
+                    SimpleIdentifier
+                      token: b @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get b @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      topLevelVariables
+        static const annotation @91
+          reference: <testLibraryFragment>::@topLevelVariable::annotation
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @104
+              staticType: int
+      accessors
+        synthetic static get annotation @-1
+          reference: <testLibraryFragment>::@getter::annotation
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_enum_values() async {
+    var library = await buildLibrary('enum E { v1, v2 }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v1 @9
+              reference: <testLibraryFragment>::@enum::E::@field::v1
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant v2 @13
+              reference: <testLibraryFragment>::@enum::E::@field::v2
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v1 @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v1
+                      staticType: E
+                    SimpleIdentifier
+                      token: v2 @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v2
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v1 @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v1
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get v2 @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v2
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_enums() async {
+    var library = await buildLibrary('enum E1 { v1 } enum E2 { v2 }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E1 @5
+          reference: <testLibraryFragment>::@enum::E1
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v1 @10
+              reference: <testLibraryFragment>::@enum::E1::@field::v1
+              enclosingElement: <testLibraryFragment>::@enum::E1
+              type: E1
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E1 @-1
+                      element: <testLibraryFragment>::@enum::E1
+                      type: E1
+                    staticElement: <testLibraryFragment>::@enum::E1::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E1
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E1::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E1
+              type: List<E1>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v1 @-1
+                      staticElement: <testLibraryFragment>::@enum::E1::@getter::v1
+                      staticType: E1
+                  rightBracket: ] @0
+                  staticType: List<E1>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E1
+          accessors
+            synthetic static get v1 @-1
+              reference: <testLibraryFragment>::@enum::E1::@getter::v1
+              enclosingElement: <testLibraryFragment>::@enum::E1
+              returnType: E1
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E1::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E1
+              returnType: List<E1>
+        enum E2 @20
+          reference: <testLibraryFragment>::@enum::E2
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v2 @25
+              reference: <testLibraryFragment>::@enum::E2::@field::v2
+              enclosingElement: <testLibraryFragment>::@enum::E2
+              type: E2
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E2 @-1
+                      element: <testLibraryFragment>::@enum::E2
+                      type: E2
+                    staticElement: <testLibraryFragment>::@enum::E2::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E2
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E2::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E2
+              type: List<E2>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v2 @-1
+                      staticElement: <testLibraryFragment>::@enum::E2::@getter::v2
+                      staticType: E2
+                  rightBracket: ] @0
+                  staticType: List<E2>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E2::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E2
+          accessors
+            synthetic static get v2 @-1
+              reference: <testLibraryFragment>::@enum::E2::@getter::v2
+              enclosingElement: <testLibraryFragment>::@enum::E2
+              returnType: E2
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E2::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E2
+              returnType: List<E2>
+''');
+  }
+
+  test_error_extendsEnum() async {
+    var library = await buildLibrary('''
+enum E {a, b, c}
+
+class M {}
+
+class A extends E {
+  foo() {}
+}
+
+class B implements E, M {
+  foo() {}
+}
+
+class C extends Object with E, M {
+  foo() {}
+}
+
+class D = Object with M, E;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class M @24
+          reference: <testLibraryFragment>::@class::M
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::M::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::M
+        class A @36
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @52
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: dynamic
+        class B @70
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            M
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+          methods
+            foo @92
+              reference: <testLibraryFragment>::@class::B::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: dynamic
+        class C @110
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            foo @141
+              reference: <testLibraryFragment>::@class::C::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+        class alias D @159
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant a @8
+              reference: <testLibraryFragment>::@enum::E::@field::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant b @11
+              reference: <testLibraryFragment>::@enum::E::@field::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant c @14
+              reference: <testLibraryFragment>::@enum::E::@field::c
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: a @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
+                      staticType: E
+                    SimpleIdentifier
+                      token: b @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
+                      staticType: E
+                    SimpleIdentifier
+                      token: c @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::c
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get b @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get c @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::c
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_metadata_enum_constant() async {
+    var library = await buildLibrary('const a = 42; enum E { @a v }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @19
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @26
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              metadata
+                Annotation
+                  atSign: @ @23
+                  name: SimpleIdentifier
+                    token: a @24
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 42 @10
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_enum_constant_instanceCreation() async {
+    var library = await buildLibrary('''
+class A {
+  final dynamic value;
+  const A(this.value);
+}
+
+enum E {
+  @A(100) a,
+  b,
+  @A(300) c,
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final value @26
+              reference: <testLibraryFragment>::@class::A::@field::value
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: dynamic
+          constructors
+            const @41
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional final this.value @48
+                  type: dynamic
+                  field: <testLibraryFragment>::@class::A::@field::value
+          accessors
+            synthetic get value @-1
+              reference: <testLibraryFragment>::@class::A::@getter::value
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: dynamic
+      enums
+        enum E @64
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant a @78
+              reference: <testLibraryFragment>::@enum::E::@field::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              metadata
+                Annotation
+                  atSign: @ @70
+                  name: SimpleIdentifier
+                    token: A @71
+                    staticElement: <testLibraryFragment>::@class::A
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @72
+                    arguments
+                      IntegerLiteral
+                        literal: 100 @73
+                        staticType: int
+                    rightParenthesis: ) @76
+                  element: <testLibraryFragment>::@class::A::@constructor::new
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant b @83
+              reference: <testLibraryFragment>::@enum::E::@field::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant c @96
+              reference: <testLibraryFragment>::@enum::E::@field::c
+              enclosingElement: <testLibraryFragment>::@enum::E
+              metadata
+                Annotation
+                  atSign: @ @88
+                  name: SimpleIdentifier
+                    token: A @89
+                    staticElement: <testLibraryFragment>::@class::A
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @90
+                    arguments
+                      IntegerLiteral
+                        literal: 300 @91
+                        staticType: int
+                    rightParenthesis: ) @94
+                  element: <testLibraryFragment>::@class::A::@constructor::new
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: a @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
+                      staticType: E
+                    SimpleIdentifier
+                      token: b @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
+                      staticType: E
+                    SimpleIdentifier
+                      token: c @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::c
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get b @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get c @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::c
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_metadata_enum_constant_self() async {
+    var library = await buildLibrary(r'''
+enum E {
+  @v
+  v
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @16
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              metadata
+                Annotation
+                  atSign: @ @11
+                  name: SimpleIdentifier
+                    token: v @12
+                    staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                    staticType: null
+                  element: <testLibraryFragment>::@enum::E::@getter::v
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_metadata_enum_constructor() async {
+    var library = await buildLibrary(r'''
+const a = 42;
+enum E {
+  v;
+  @a
+  const E();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @19
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @25
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            const @41
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              metadata
+                Annotation
+                  atSign: @ @30
+                  name: SimpleIdentifier
+                    token: a @31
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 42 @10
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_enum_method() async {
+    var library = await buildLibrary(r'''
+const a = 42;
+enum E {
+  v;
+  @a
+  void foo() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @19
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @25
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+          methods
+            foo @40
+              reference: <testLibraryFragment>::@enum::E::@method::foo
+              enclosingElement: <testLibraryFragment>::@enum::E
+              metadata
+                Annotation
+                  atSign: @ @30
+                  name: SimpleIdentifier
+                    token: a @31
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+              returnType: void
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 42 @10
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_enum_scope() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+enum E<@foo T> {
+  v;
+  static const foo = 1;
+  @foo
+  void bar() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @26
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            covariant T @33
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @28
+                  name: SimpleIdentifier
+                    token: foo @29
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          supertype: Enum
+          fields
+            static const enumConstant v @40
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E<dynamic>
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E<dynamic>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@enum::E::@constructor::new
+                      substitution: {T: dynamic}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E<dynamic>
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E<dynamic>
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+            static const foo @58
+              reference: <testLibraryFragment>::@enum::E::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 1 @64
+                  staticType: int
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E<dynamic>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: int
+          methods
+            bar @81
+              reference: <testLibraryFragment>::@enum::E::@method::bar
+              enclosingElement: <testLibraryFragment>::@enum::E
+              metadata
+                Annotation
+                  atSign: @ @69
+                  name: SimpleIdentifier
+                    token: foo @70
+                    staticElement: <testLibraryFragment>::@enum::E::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@enum::E::@getter::foo
+              returnType: void
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_enum_typeParameter() async {
+    var library = await buildLibrary('''
+const a = 42;
+enum E<@a T> {
+  v
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @19
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @24
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @21
+                  name: SimpleIdentifier
+                    token: a @22
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+          supertype: Enum
+          fields
+            static const enumConstant v @31
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E<dynamic>
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E<dynamic>
+                    staticElement: ConstructorMember
+                      base: <testLibraryFragment>::@enum::E::@constructor::new
+                      substitution: {T: dynamic}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E<dynamic>
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E<dynamic>>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E<dynamic>
+                  rightBracket: ] @0
+                  staticType: List<E<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E<dynamic>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E<dynamic>>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 42 @10
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_enumDeclaration() async {
+    var library = await buildLibrary('const a = 42; @a enum E { v }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @22
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @14
+              name: SimpleIdentifier
+                token: a @15
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+          supertype: Enum
+          fields
+            static const enumConstant v @26
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 42 @10
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+}
+
+abstract class EnumElementTest_augmentation extends ElementsBaseTest {
+  test_add_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+enum A {
+  v;
+  void foo() {}
+}
+
+augment enum A {;
+  void bar() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        enum A @35
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @41
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::v
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+              returnType: List<A>
+          methods
+            foo @51
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@method::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+              returnType: void
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::values
+            constants
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::v
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::values
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@method::foo
+        augment enum A @76
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+          methods
+            bar @88
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmentationTarget() async {
+    newFile('$testPackageLibPath/a1.dart', r'''
+augment library 'test.dart';
+import augment 'a11.dart';
+import augment 'a12.dart';
+augment enum A {}
+''');
+
+    newFile('$testPackageLibPath/a11.dart', r'''
+augment library 'a1.dart';
+augment enum A {}
+''');
+
+    newFile('$testPackageLibPath/a12.dart', r'''
+augment library 'a1.dart';
+augment enum A {}
+''');
+
+    newFile('$testPackageLibPath/a2.dart', r'''
+augment library 'test.dart';
+import augment 'a21.dart';
+import augment 'a22.dart';
+augment enum A {}
+''');
+
+    newFile('$testPackageLibPath/a21.dart', r'''
+augment library 'a2.dart';
+augment enum A {}
+''');
+
+    newFile('$testPackageLibPath/a22.dart', r'''
+augment library 'a2.dart';
+augment enum A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a1.dart';
+import augment 'a2.dart';
+enum A {
+  v
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a1.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a1.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a1.dart
+      augmentationImports
+        package:test/a11.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
+          reference: <testLibrary>::@augmentation::package:test/a11.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a11.dart
+        package:test/a12.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
+          reference: <testLibrary>::@augmentation::package:test/a12.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a12.dart
+    package:test/a2.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a2.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a2.dart
+      augmentationImports
+        package:test/a21.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
+          reference: <testLibrary>::@augmentation::package:test/a21.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a21.dart
+        package:test/a22.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
+          reference: <testLibrary>::@augmentation::package:test/a22.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a22.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @57
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a1.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @63
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a1.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @96
+          reference: <testLibrary>::@fragment::package:test/a1.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a1.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/a11.dart::@enumAugmentation::A
+    <testLibrary>::@fragment::package:test/a11.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a11.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
+      enums
+        augment enum A @40
+          reference: <testLibrary>::@fragment::package:test/a11.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a11.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a1.dart::@enumAugmentation::A
+          augmentation: <testLibrary>::@fragment::package:test/a12.dart::@enumAugmentation::A
+    <testLibrary>::@fragment::package:test/a12.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a12.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
+      enums
+        augment enum A @40
+          reference: <testLibrary>::@fragment::package:test/a12.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a12.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a11.dart::@enumAugmentation::A
+          augmentation: <testLibrary>::@fragment::package:test/a2.dart::@enumAugmentation::A
+    <testLibrary>::@fragment::package:test/a2.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @96
+          reference: <testLibrary>::@fragment::package:test/a2.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a2.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a12.dart::@enumAugmentation::A
+          augmentation: <testLibrary>::@fragment::package:test/a21.dart::@enumAugmentation::A
+    <testLibrary>::@fragment::package:test/a21.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a21.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
+      enums
+        augment enum A @40
+          reference: <testLibrary>::@fragment::package:test/a21.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a21.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a2.dart::@enumAugmentation::A
+          augmentation: <testLibrary>::@fragment::package:test/a22.dart::@enumAugmentation::A
+    <testLibrary>::@fragment::package:test/a22.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a22.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
+      enums
+        augment enum A @40
+          reference: <testLibrary>::@fragment::package:test/a22.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a22.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a21.dart::@enumAugmentation::A
+  exportedReferences
+    declared <testLibraryFragment>::@enum::A
+  exportNamespace
+    A: <testLibraryFragment>::@enum::A
+''');
+  }
+
+  test_augmentationTarget_augmentationThenDeclaration() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment enum A {;
+  void foo1() {}
+}
+
+enum A {
+  v;
+  void foo2() {}
+}
+
+augment enum A {;
+  void foo3() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          fields
+            synthetic static const values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@field::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
+          accessors
+            synthetic static get values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@getter::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
+              returnType: List<A>
+          methods
+            foo1 @55
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@method::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
+              returnType: void
+        enum A @73
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
+          supertype: Enum
+          fields
+            static const enumConstant v @79
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::v
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+              returnType: List<A>
+          methods
+            foo2 @89
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@method::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+              returnType: void
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::values
+            constants
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::v
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::values
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@method::foo2
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1::@method::foo3
+        augment enum A @115
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enum::A
+          methods
+            foo3 @127
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1::@method::foo3
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
+              returnType: void
+''');
+  }
+
+  test_augmentationTarget_no2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment enum A {;
+  void foo1() {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment enum A {;
+  void foo2() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @67
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          fields
+            synthetic static const values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: List<A>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  rightBracket: ] @0
+                  staticType: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          accessors
+            synthetic static get values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: List<A>
+          methods
+            foo1 @79
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: void
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::values
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::values
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::foo1
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@method::foo2
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      enums
+        augment enum A @39
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          methods
+            foo2 @51
+              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@method::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmented_constants_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {
+  v2
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v1
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v1 @36
+              reference: <testLibraryFragment>::@enum::A::@field::v1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v1 @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v1
+                      staticType: A
+                    SimpleIdentifier
+                      token: v2 @-1
+                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+              id: field_1
+              getter: getter_1
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v1 @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            static const enumConstant v2 @48
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_2
+              getter: getter_2
+          accessors
+            synthetic static get v2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: A
+              id: getter_2
+              variable: field_2
+''');
+  }
+
+  test_augmented_constants_add2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {
+  v2
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment enum A {
+  v3
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+enum A {
+  v1
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @55
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v1 @61
+              reference: <testLibraryFragment>::@enum::A::@field::v1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v1 @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v1
+                      staticType: A
+                    SimpleIdentifier
+                      token: v2 @-1
+                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
+                      staticType: A
+                    SimpleIdentifier
+                      token: v3 @-1
+                      staticElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getter::v3
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+              id: field_1
+              getter: getter_1
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v1 @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@field::v3
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@field::v3
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getter::v3
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          fields
+            static const enumConstant v2 @48
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_2
+              getter: getter_2
+          accessors
+            synthetic static get v2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: A
+              id: getter_2
+              variable: field_2
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          fields
+            static const enumConstant v3 @48
+              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@field::v3
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_3
+              getter: getter_3
+          accessors
+            synthetic static get v3 @-1
+              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getter::v3
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+              returnType: A
+              id: getter_3
+              variable: field_3
+''');
+  }
+
+  test_augmented_constants_add_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {
+  v2,
+  augment v2
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v1
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v1 @36
+              reference: <testLibraryFragment>::@enum::A::@field::v1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v1 @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v1
+                      staticType: A
+                    SimpleIdentifier
+                      token: v2 @-1
+                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+              id: field_1
+              getter: getter_1
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v1 @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            static const enumConstant v2 @48
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_2
+              getter: getter_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
+            augment static const enumConstant v2 @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_3
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
+          accessors
+            synthetic static get v2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: A
+              id: getter_2
+              variable: field_2
+''');
+  }
+
+  test_augmented_constants_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {
+  augment v2
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v1, v2, v3
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v1 @36
+              reference: <testLibraryFragment>::@enum::A::@field::v1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_0
+              getter: getter_0
+            static const enumConstant v2 @40
+              reference: <testLibraryFragment>::@enum::A::@field::v2
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_1
+              getter: getter_1
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
+            static const enumConstant v3 @44
+              reference: <testLibraryFragment>::@enum::A::@field::v3
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_2
+              getter: getter_2
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v1 @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v1
+                      staticType: A
+                    SimpleIdentifier
+                      token: v2 @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v2
+                      staticType: A
+                    SimpleIdentifier
+                      token: v3 @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v3
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+              id: field_3
+              getter: getter_3
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v1 @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get v2 @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v2
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_1
+              variable: field_1
+            synthetic static get v3 @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v3
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_2
+              variable: field_2
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_3
+              variable: field_3
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
+              <testLibraryFragment>::@enum::A::@field::v3
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
+              <testLibraryFragment>::@enum::A::@field::v3
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v1
+              <testLibraryFragment>::@enum::A::@getter::v2
+              <testLibraryFragment>::@enum::A::@getter::v3
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            augment static const enumConstant v2 @56
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_4
+              augmentationTarget: <testLibraryFragment>::@enum::A::@field::v2
+''');
+  }
+
+  test_augmented_constants_augment_withArguments() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {
+  augment v1(3)
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v1(1), v2(2);
+  const A(int value);
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v1 @36
+              reference: <testLibraryFragment>::@enum::A::@field::v1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      IntegerLiteral
+                        literal: 1 @39
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_0
+              getter: getter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v1
+            static const enumConstant v2 @43
+              reference: <testLibraryFragment>::@enum::A::@field::v2
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      IntegerLiteral
+                        literal: 2 @46
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_1
+              getter: getter_1
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v1 @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v1
+                      staticType: A
+                    SimpleIdentifier
+                      token: v2 @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v2
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+              id: field_2
+              getter: getter_2
+          constructors
+            const @58
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+              parameters
+                requiredPositional value @64
+                  type: int
+          accessors
+            synthetic static get v1 @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get v2 @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v2
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_1
+              variable: field_1
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v1
+              <testLibraryFragment>::@enum::A::@field::v2
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v1
+              <testLibraryFragment>::@enum::A::@field::v2
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v1
+              <testLibraryFragment>::@enum::A::@getter::v2
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            augment static const enumConstant v1 @56
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      IntegerLiteral
+                        literal: 3 @59
+                        staticType: int
+                    rightParenthesis: ) @0
+                  staticType: A
+              id: field_3
+              augmentationTarget: <testLibraryFragment>::@enum::A::@field::v1
+''');
+  }
+
+  test_augmented_constants_typeParameterCountMismatch() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A<T> {
+  augment v
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v, v2
+}
+''');
+
+    configuration
+      ..withConstructors = false
+      ..withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v
+            static const enumConstant v2 @39
+              reference: <testLibraryFragment>::@enum::A::@field::v2
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get v2 @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v2
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              FieldMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v
+                augmentationSubstitution: {T: InvalidType}
+              <testLibraryFragment>::@enum::A::@field::v2
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              FieldMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v
+                augmentationSubstitution: {T: InvalidType}
+              <testLibraryFragment>::@enum::A::@field::v2
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::v2
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T @44
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            augment static const enumConstant v @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              augmentationTarget: <testLibraryFragment>::@enum::A::@field::v
+''');
+  }
+
+  test_augmented_constructors_add_named() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  const A.named();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v.named();
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          constructors
+            const named @57
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              periodOffset: 56
+              nameEnd: 62
+''');
+  }
+
+  test_augmented_constructors_add_named_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A<T2> {;
+  const A.named(T2 a);
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A<T1> {
+  v<int>.named()
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @32
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @40
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A<int>
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A<dynamic>>
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A<int>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A<dynamic>>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              ConstructorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
+                augmentationSubstitution: {T2: T1}
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @44
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          constructors
+            const named @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              periodOffset: 60
+              nameEnd: 66
+              parameters
+                requiredPositional a @70
+                  type: T2
+''');
+  }
+
+  test_augmented_constructors_add_named_hasUnnamed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  const A.named();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  const A();
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            const @47
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          constructors
+            const named @57
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              periodOffset: 56
+              nameEnd: 62
+''');
+  }
+
+  test_augmented_constructors_add_unnamed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  const A();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          constructors
+            const @55
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+''');
+  }
+
+  test_augmented_constructors_add_unnamed_hasNamed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  const A();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  const A.named();
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            const named @49
+              reference: <testLibraryFragment>::@enum::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@enum::A
+              periodOffset: 48
+              nameEnd: 54
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
+              <testLibraryFragment>::@enum::A::@constructor::named
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          constructors
+            const @55
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+''');
+  }
+
+  test_augmented_constructors_add_useFieldFormal() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  const A.named(this.f);
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v(0);
+  final int f;
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+            final f @54
+              reference: <testLibraryFragment>::@enum::A::@field::f
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::f
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::f
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::f
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          constructors
+            const named @57
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              periodOffset: 56
+              nameEnd: 62
+              parameters
+                requiredPositional final this.f @68
+                  type: int
+                  field: <testLibraryFragment>::@enum::A::@field::f
+''');
+  }
+
+  test_augmented_constructors_add_useFieldInitializer() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  const A.named() : f = 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  final int f;
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+            final f @51
+              reference: <testLibraryFragment>::@enum::A::@field::f
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::f
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::f
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::f
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          constructors
+            const named @57
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              periodOffset: 56
+              nameEnd: 62
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: f @67
+                    staticElement: <testLibraryFragment>::@enum::A::@field::f
+                    staticType: null
+                  equals: = @69
+                  expression: IntegerLiteral
+                    literal: 0 @71
+                    staticType: int
+''');
+  }
+
+  test_augmented_field_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment final int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  final int foo = 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            final foo @51
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              getter: getter_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            augment final foo @67
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_3
+              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment final int foo = 1;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment final int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+enum A {
+  v;
+  final int foo = 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @55
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @61
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            final foo @76
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              getter: getter_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          fields
+            augment final foo @67
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_3
+              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          fields
+            augment final foo @67
+              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_4
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+''');
+  }
+
+  test_augmented_field_augment_field_afterGetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment int get foo => 1;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment final int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+enum A {
+  v;
+  final int foo = 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @55
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @61
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            final foo @76
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              getter: getter_2
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_3
+              variable: field_2
+              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          fields
+            augment final foo @67
+              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_3
+              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_afterSetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment set foo(int _) {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment final int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+enum A {
+  v;
+  final int foo = 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @55
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @61
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            final foo @76
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              getter: getter_2
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::foo
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          accessors
+            augment set foo= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              parameters
+                requiredPositional _ @69
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: <null>
+              augmentationTargetAny: <testLibraryFragment>::@enum::A::@getter::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          fields
+            augment final foo @67
+              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_3
+              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_differentTypes() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment final double foo = 1.2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  final int foo = 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            final foo @51
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              getter: getter_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            augment final foo @70
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: double
+              shouldUseTypeForInitializerInference: true
+              id: field_3
+              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_functionExpression() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment final int Function() foo = () {
+    return augmented() + 1;
+  };
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  final int Function() foo = () {
+    return 0;
+  };
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+            final foo @62
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int Function()
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                SimpleIdentifier
+                  token: _notSerializableExpression @-1
+                  staticElement: <null>
+                  staticType: null
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int Function()
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            augment final foo @78
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: int Function()
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                SimpleIdentifier
+                  token: _notSerializableExpression @-1
+                  staticElement: <null>
+                  staticType: null
+              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
+''');
+  }
+
+  /// This is not allowed by the specification, but allowed syntactically,
+  /// so we need a way to handle it.
+  test_augmented_field_augment_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment final int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  int get foo => 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              id: field_2
+              getter: getter_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            get foo @49
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            augment final foo @67
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_3
+              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
+''');
+  }
+
+  test_augmented_fields_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  final int foo2 = 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  final int foo1 = 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            final foo1 @51
+              reference: <testLibraryFragment>::@enum::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              getter: getter_2
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            synthetic get foo1 @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            final foo2 @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_3
+              getter: getter_3
+          accessors
+            synthetic get foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_3
+              variable: field_3
+''');
+  }
+
+  test_augmented_fields_add_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A<T2> {;
+  final T2 foo2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A<T1> {
+  v<int>();
+  final T1 foo1;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @32
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @40
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A<int>
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A<dynamic>>
+              id: field_1
+              getter: getter_1
+            final foo1 @61
+              reference: <testLibraryFragment>::@enum::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: T1
+              id: field_2
+              getter: getter_2
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A<int>
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A<dynamic>>
+              id: getter_1
+              variable: field_1
+            synthetic get foo1 @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: T1
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo1
+              FieldMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
+                augmentationSubstitution: {T2: T1}
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::foo1
+              PropertyAccessorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
+                augmentationSubstitution: {T2: T1}
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @44
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            final foo2 @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: T2
+              id: field_3
+              getter: getter_3
+          accessors
+            synthetic get foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: T2
+              id: getter_3
+              variable: field_3
+''');
+  }
+
+  test_augmented_fields_add_useFieldFormal() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  final int foo;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v(0);
+  const A(this.foo);
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            const @50
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+              parameters
+                requiredPositional final this.foo @57
+                  type: int
+                  field: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            final foo @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: int
+          accessors
+            synthetic get foo @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+''');
+  }
+
+  test_augmented_fields_add_useFieldInitializer() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  final int foo;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  const A() : foo = 0;
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            const @47
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: foo @53
+                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
+                    staticType: null
+                  equals: = @57
+                  expression: IntegerLiteral
+                    literal: 0 @59
+                    staticType: int
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            final foo @59
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: int
+          accessors
+            synthetic get foo @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+''');
+  }
+
+  test_augmented_getters_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  int get foo2 => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  int get foo1 => 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@enum::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              id: field_2
+              getter: getter_2
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            get foo1 @49
+              reference: <testLibraryFragment>::@enum::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: int
+              id: field_3
+              getter: getter_3
+          accessors
+            get foo2 @57
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_3
+              variable: field_3
+''');
+  }
+
+  test_augmented_getters_add_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A<T2> {;
+  T2 get foo2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A<T1> {
+  v<int>();
+  T1 get foo1;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @32
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @40
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A<int>
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A<dynamic>>
+              id: field_1
+              getter: getter_1
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@enum::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: T1
+              id: field_2
+              getter: getter_2
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A<int>
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A<dynamic>>
+              id: getter_1
+              variable: field_1
+            abstract get foo1 @59
+              reference: <testLibraryFragment>::@enum::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: T1
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo1
+              FieldMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
+                augmentationSubstitution: {T2: T1}
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::foo1
+              PropertyAccessorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
+                augmentationSubstitution: {T2: T1}
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @44
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: T2
+              id: field_3
+              getter: getter_3
+          accessors
+            abstract get foo2 @60
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: T2
+              id: getter_3
+              variable: field_3
+''');
+  }
+
+  test_augmented_getters_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  final int foo = 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            final foo @51
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              getter: getter_2
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_3
+              variable: field_2
+              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo
+''');
+  }
+
+  test_augmented_getters_augment_field2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment int get foo => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+enum A {
+  v;
+  final int foo = 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @55
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @61
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            final foo @76
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              getter: getter_2
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_3
+              variable: field_2
+              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_4
+              variable: field_2
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+''');
+  }
+
+  test_augmented_getters_augment_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment int get foo1 => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  int get foo1 => 0;
+  int get foo2 => 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@enum::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              id: field_2
+              getter: getter_2
+            synthetic foo2 @-1
+              reference: <testLibraryFragment>::@enum::A::@field::foo2
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              id: field_3
+              getter: getter_3
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            get foo1 @49
+              reference: <testLibraryFragment>::@enum::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo1
+            get foo2 @70
+              reference: <testLibraryFragment>::@enum::A::@getter::foo2
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_3
+              variable: field_3
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo1
+              <testLibraryFragment>::@enum::A::@field::foo2
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo1
+              <testLibraryFragment>::@enum::A::@getter::foo2
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          accessors
+            augment get foo1 @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_4
+              variable: field_2
+              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo1
+''');
+  }
+
+  test_augmented_getters_augment_getter2_oneLib_oneTop() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment int get foo => 0;
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  int get foo => 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              id: field_2
+              getter: getter_2
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            get foo @49
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::0
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::1
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::0
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_3
+              variable: field_2
+              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::1
+            augment get foo @93
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_4
+              variable: field_2
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::0
+''');
+  }
+
+  test_augmented_getters_augment_getter2_twoLib() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment int get foo => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+enum A {
+  v;
+  int get foo => 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @55
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @61
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              id: field_2
+              getter: getter_2
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            get foo @74
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_3
+              variable: field_2
+              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_4
+              variable: field_2
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+''');
+  }
+
+  test_augmented_getters_augment_nothing() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withConstructors = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: <null>
+''');
+  }
+
+  test_augmented_interfaces() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A implements I2 {}
+class I2 {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A implements I1 {
+  v
+}
+class I1 {}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I1 @60
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          interfaces
+            I1
+          fields
+            static const enumConstant v @50
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            interfaces
+              I1
+              I2
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class I2 @67
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          interfaces
+            I2
+''');
+  }
+
+  test_augmented_interfaces_chain() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment enum A implements I2 {}
+class I2 {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment enum A implements I3 {}
+class I3 {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A implements I1 {
+  v
+}
+class I1 {}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I1 @60
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          interfaces
+            I1
+          fields
+            static const enumConstant v @50
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            interfaces
+              I1
+              I2
+              I3
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class I2 @92
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+      enums
+        augment enum A @67
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          interfaces
+            I2
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        class I3 @64
+          reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::I3
+      enums
+        augment enum A @39
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          interfaces
+            I3
+''');
+  }
+
+  test_augmented_interfaces_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A<T2> implements I2<T2> {}
+class I2<E> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A<T> implements I1 {
+  v<int>()
+}
+class I1 {}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I1 @70
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @32
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          interfaces
+            I1
+          fields
+            static const enumConstant v @53
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A<int>
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A<int>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A<dynamic>>
+          augmented
+            interfaces
+              I1
+              I2<T>
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class I2 @75
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant E @78
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @44
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          interfaces
+            I2<T2>
+''');
+  }
+
+  test_augmented_interfaces_generic_mismatch() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A<T2, T3> implements I2<T2> {}
+class I2<E> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A<T> implements I1 {
+  v
+}
+class I1 {}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I1 @63
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @32
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          interfaces
+            I1
+          fields
+            static const enumConstant v @53
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A<dynamic>
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A<dynamic>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A<dynamic>>
+          augmented
+            interfaces
+              I1
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class I2 @79
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant E @82
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @44
+              defaultType: dynamic
+            covariant T3 @48
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          interfaces
+            I2<T2>
+''');
+  }
+
+  test_augmented_methods() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  void bar() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  void foo() {}
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          methods
+            foo @46
+              reference: <testLibraryFragment>::@enum::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: void
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
+              <testLibraryFragment>::@enum::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          methods
+            bar @54
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmented_methods_add_withDefaultValue() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  void foo([int x = 42]) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          methods
+            foo @54
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              parameters
+                optionalPositional default x @63
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 42 @67
+                      staticType: int
+              returnType: void
+''');
+  }
+
+  test_augmented_methods_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment void foo1() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  void foo1() {}
+  void foo2() {}
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          methods
+            foo1 @46
+              reference: <testLibraryFragment>::@enum::A::@method::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo1
+            foo2 @63
+              reference: <testLibraryFragment>::@enum::A::@method::foo2
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: void
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo1
+              <testLibraryFragment>::@enum::A::@method::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          methods
+            augment foo1 @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@enum::A::@method::foo1
+''');
+  }
+
+  test_augmented_methods_augment2_oneLib_oneTop() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment void foo() {}
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  void foo() {}
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          methods
+            foo @46
+              reference: <testLibraryFragment>::@enum::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::0
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::1
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          methods
+            augment foo @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::0
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@enum::A::@method::foo
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::1
+            augment foo @86
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::0
+''');
+  }
+
+  test_augmented_methods_augment2_oneLib_twoTop() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment void foo() {}
+}
+augment enum A {;
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  void foo() {}
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          methods
+            foo @46
+              reference: <testLibraryFragment>::@enum::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@methodAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
+          methods
+            augment foo @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@enum::A::@method::foo
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1::@methodAugmentation::foo
+        augment enum A @86
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
+          methods
+            augment foo @106
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
+              returnType: void
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@methodAugmentation::foo
+''');
+  }
+
+  test_augmented_methods_augment2_twoLib() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment enum A {;
+  augment void foo() {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment enum A {;
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  void foo() {}
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          methods
+            foo @46
+              reference: <testLibraryFragment>::@enum::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+            methods
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @67
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          methods
+            augment foo @87
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@enum::A::@method::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      enums
+        augment enum A @39
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          methods
+            augment foo @59
+              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
+''');
+  }
+
+  test_augmented_methods_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A<T2> {;
+  T2 bar() => throw 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A<T> {
+  v<int>();
+  T foo() => throw 0;
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @32
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @39
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A<int>
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A<int>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A<dynamic>>
+          methods
+            foo @53
+              reference: <testLibraryFragment>::@enum::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: T
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+            methods
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
+                augmentationSubstitution: {T2: T}
+              <testLibraryFragment>::@enum::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @44
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          methods
+            bar @56
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: T2
+''');
+  }
+
+  test_augmented_methods_generic_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A<T2> {;
+  augment T2 foo() => throw 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A<T> {
+  v<int>();
+  T foo() => throw 0;
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @32
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @39
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A<int>
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A<int>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A<dynamic>>
+          methods
+            foo @53
+              reference: <testLibraryFragment>::@enum::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: T
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+            methods
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
+                augmentationSubstitution: {T2: T}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @44
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          methods
+            augment foo @64
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              returnType: T2
+              augmentationTarget: <testLibraryFragment>::@enum::A::@method::foo
+''');
+  }
+
+  test_augmented_mixins() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A with M2 {}
+mixin M2 {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A with M1 {
+  v
+}
+mixin M1 {}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          mixins
+            M1
+          fields
+            static const enumConstant v @44
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            mixins
+              M1
+              M2
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+      mixins
+        mixin M1 @54
+          reference: <testLibraryFragment>::@mixin::M1
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          mixins
+            M2
+      mixins
+        mixin M2 @61
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_augmented_mixins_inferredTypeArguments() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A<T2> with M2 {}
+mixin M2<U2> on M1<U2> {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment enum A<T3> with M3 {}
+mixin M3<U3> on M2<U3> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+enum A<T1> with M1<T1> {
+  v<int>()
+}
+mixin M1<U1> {}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @55
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @57
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          mixins
+            M1<T1>
+          fields
+            static const enumConstant v @77
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A<int>
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A<dynamic>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A<int>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A<dynamic>>
+          augmented
+            mixins
+              M1<T1>
+              M2<T1>
+              M3<T1>
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+      mixins
+        mixin M1 @94
+          reference: <testLibraryFragment>::@mixin::M1
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U1 @97
+              defaultType: dynamic
+          superclassConstraints
+            Object
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @44
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          mixins
+            M2<T2>
+      mixins
+        mixin M2 @65
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant U2 @68
+              defaultType: dynamic
+          superclassConstraints
+            M1<U2>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          typeParameters
+            covariant T3 @44
+              defaultType: dynamic
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          mixins
+            M3<T3>
+      mixins
+        mixin M3 @65
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          typeParameters
+            covariant U3 @68
+              defaultType: dynamic
+          superclassConstraints
+            M2<U3>
+''');
+  }
+
+  test_augmented_setters_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  set foo2(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  set foo1(int _) {}
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@enum::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              id: field_2
+              setter: setter_0
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            set foo1= @45
+              reference: <testLibraryFragment>::@enum::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              parameters
+                requiredPositional _ @54
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_2
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@setter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setter::foo2
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              type: int
+              id: field_3
+              setter: setter_1
+          accessors
+            set foo2= @53
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              parameters
+                requiredPositional _ @62
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_3
+''');
+  }
+
+  test_augmented_setters_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment set foo(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  final int foo = 0;
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            final foo @51
+              reference: <testLibraryFragment>::@enum::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              getter: getter_2
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::foo
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          accessors
+            augment set foo= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              parameters
+                requiredPositional _ @69
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: <null>
+              augmentationTargetAny: <testLibraryFragment>::@enum::A::@getter::foo
+''');
+  }
+
+  test_augmented_setters_augment_nothing() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment set foo(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          accessors
+            augment set foo= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              parameters
+                requiredPositional _ @69
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: <null>
+''');
+  }
+
+  test_augmented_setters_augment_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment set foo1(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  set foo1(int _) {}
+  set foo2(int _) {}
+}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              id: field_0
+              getter: getter_0
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              id: field_1
+              getter: getter_1
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@enum::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              id: field_2
+              setter: setter_0
+            synthetic foo2 @-1
+              reference: <testLibraryFragment>::@enum::A::@field::foo2
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: int
+              id: field_3
+              setter: setter_1
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+              id: getter_0
+              variable: field_0
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+              id: getter_1
+              variable: field_1
+            set foo1= @45
+              reference: <testLibraryFragment>::@enum::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@enum::A
+              parameters
+                requiredPositional _ @54
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_2
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo1
+            set foo2= @66
+              reference: <testLibraryFragment>::@enum::A::@setter::foo2
+              enclosingElement: <testLibraryFragment>::@enum::A
+              parameters
+                requiredPositional _ @75
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_3
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::foo1
+              <testLibraryFragment>::@enum::A::@field::foo2
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo1
+              <testLibraryFragment>::@enum::A::@setter::foo2
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          accessors
+            augment set foo1= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              parameters
+                requiredPositional _ @70
+                  type: int
+              returnType: void
+              id: setter_2
+              variable: field_2
+              augmentationTarget: <testLibraryFragment>::@enum::A::@setter::foo1
+''');
+  }
+
+  test_augmentedBy_class2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+
+enum A {v}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @56
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @59
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTargetAny: <testLibraryFragment>::@enum::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTargetAny: <testLibraryFragment>::@enum::A
+''');
+  }
+
+  test_augmentedBy_class_enum() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+
+augment enum A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+
+enum A {v}
+''');
+
+    configuration
+      ..withConstantInitializers = false
+      ..withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @56
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @59
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTargetAny: <testLibraryFragment>::@enum::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+''');
+  }
+
+  test_constructors_augment2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment const A.named();
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment const A.named();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+enum A {
+  v.named();
+  const A.named();
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @55
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @61
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+          constructors
+            const named @82
+              reference: <testLibraryFragment>::@enum::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@enum::A
+              periodOffset: 81
+              nameEnd: 87
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@constructorAugmentation::named
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          constructors
+            augment const named @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              periodOffset: 64
+              nameEnd: 70
+              augmentationTarget: <testLibraryFragment>::@enum::A::@constructor::named
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@constructorAugmentation::named
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          constructors
+            augment const named @65
+              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@constructorAugmentation::named
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+              periodOffset: 64
+              nameEnd: 70
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
+''');
+  }
+
+  test_constructors_augment_named() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment const A.named();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v.named();
+  const A.named();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    period: . @0
+                    name: SimpleIdentifier
+                      token: named @-1
+                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
+                      staticType: null
+                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+          constructors
+            const named @57
+              reference: <testLibraryFragment>::@enum::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@enum::A
+              periodOffset: 56
+              nameEnd: 62
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          constructors
+            augment const named @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              periodOffset: 64
+              nameEnd: 70
+              augmentationTarget: <testLibraryFragment>::@enum::A::@constructor::named
+''');
+  }
+
+  test_constructors_augment_unnamed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A {;
+  augment const A();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A {
+  v;
+  const A();
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @36
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibraryFragment>::@enum::A
+                      type: A
+                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+          constructors
+            const @47
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::new
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@enum::A
+          constructors
+            augment const @63
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+              augmentationTarget: <testLibraryFragment>::@enum::A::@constructor::new
+''');
+  }
+
+  test_inferTypes_method_ofAugment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+abstract class A {
+  int foo(String a);
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment enum B {;
+  foo(a) => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+import augment 'b.dart';
+
+enum B implements A {
+  v
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      enums
+        enum B @48
+          reference: <testLibraryFragment>::@enum::B
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
+          supertype: Enum
+          interfaces
+            A
+          fields
+            static const enumConstant v @67
+              reference: <testLibraryFragment>::@enum::B::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::B
+              type: B
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::B::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::B
+              type: List<B>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::B
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::B::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::B
+              returnType: B
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::B::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::B
+              returnType: List<B>
+          augmented
+            interfaces
+              A
+            fields
+              <testLibraryFragment>::@enum::B::@field::v
+              <testLibraryFragment>::@enum::B::@field::values
+            constants
+              <testLibraryFragment>::@enum::B::@field::v
+            constructors
+              <testLibraryFragment>::@enum::B::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::B::@getter::v
+              <testLibraryFragment>::@enum::B::@getter::values
+            methods
+              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B::@method::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum B @42
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@enum::B
+          methods
+            foo @49
+              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B::@method::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
+              parameters
+                requiredPositional a @53
+                  type: String
+              returnType: int
+''');
+  }
+
+  test_inferTypes_method_usingAugmentation_interface() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  int foo(String a) => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+augment enum B implements A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+
+enum B {
+  v;
+  foo(a) => 0;
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum B @31
+          reference: <testLibraryFragment>::@enum::B
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
+          supertype: Enum
+          fields
+            static const enumConstant v @37
+              reference: <testLibraryFragment>::@enum::B::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::B
+              type: B
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::B::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::B
+              type: List<B>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::B
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::B::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::B
+              returnType: B
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::B::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::B
+              returnType: List<B>
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@enum::B::@method::foo
+              enclosingElement: <testLibraryFragment>::@enum::B
+              parameters
+                requiredPositional a @46
+                  type: String
+              returnType: int
+          augmented
+            interfaces
+              A
+            fields
+              <testLibraryFragment>::@enum::B::@field::v
+              <testLibraryFragment>::@enum::B::@field::values
+            constants
+              <testLibraryFragment>::@enum::B::@field::v
+            constructors
+              <testLibraryFragment>::@enum::B::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::B::@getter::v
+              <testLibraryFragment>::@enum::B::@getter::values
+            methods
+              <testLibraryFragment>::@enum::B::@method::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      enums
+        augment enum B @59
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@enum::B
+          interfaces
+            A
+''');
+  }
+
+  test_inferTypes_method_usingAugmentation_mixin() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+mixin A {
+  int foo(String a) => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+augment enum B with A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+
+enum B {
+  v;
+  foo(a) => 0;
+}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum B @31
+          reference: <testLibraryFragment>::@enum::B
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
+          supertype: Enum
+          fields
+            static const enumConstant v @37
+              reference: <testLibraryFragment>::@enum::B::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::B
+              type: B
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::B::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::B
+              type: List<B>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::B
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::B::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::B
+              returnType: B
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::B::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::B
+              returnType: List<B>
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@enum::B::@method::foo
+              enclosingElement: <testLibraryFragment>::@enum::B
+              parameters
+                requiredPositional a @46
+                  type: String
+              returnType: int
+          augmented
+            mixins
+              A
+            fields
+              <testLibraryFragment>::@enum::B::@field::v
+              <testLibraryFragment>::@enum::B::@field::values
+            constants
+              <testLibraryFragment>::@enum::B::@field::v
+            constructors
+              <testLibraryFragment>::@enum::B::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::B::@getter::v
+              <testLibraryFragment>::@enum::B::@getter::values
+            methods
+              <testLibraryFragment>::@enum::B::@method::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      enums
+        augment enum B @59
+          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@enum::B
+          mixins
+            A
+''');
+  }
+
+  test_typeParameters_defaultType() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment enum A<T extends B> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+enum A<T extends B> {
+  v
+}
+class B {}
+''');
+
+    configuration.withConstantInitializers = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @59
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+      enums
+        enum A @30
+          reference: <testLibraryFragment>::@enum::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @32
+              bound: B
+              defaultType: B
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          supertype: Enum
+          fields
+            static const enumConstant v @49
+              reference: <testLibraryFragment>::@enum::A::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: A<B>
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::A::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              type: List<A<B>>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::A
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: A<B>
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::A
+              returnType: List<A<B>>
+          augmented
+            fields
+              <testLibraryFragment>::@enum::A::@field::v
+              <testLibraryFragment>::@enum::A::@field::values
+            constants
+              <testLibraryFragment>::@enum::A::@field::v
+            constructors
+              <testLibraryFragment>::@enum::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@enum::A::@getter::v
+              <testLibraryFragment>::@enum::A::@getter::values
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      enums
+        augment enum A @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T @44
+              bound: B
+              defaultType: B
+          augmentationTarget: <testLibraryFragment>::@enum::A
+''');
+  }
+}
+
+@reflectiveTest
+class EnumElementTest_augmentation_fromBytes
+    extends EnumElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class EnumElementTest_augmentation_keepLinking
+    extends EnumElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+@reflectiveTest
+class EnumElementTest_fromBytes extends EnumElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class EnumElementTest_keepLinking extends EnumElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+// TODO(scheglov): This is duplicate.
+extension on ElementTextConfiguration {
+  void forPromotableFields({
+    Set<String> classNames = const {},
+    Set<String> enumNames = const {},
+    Set<String> extensionTypeNames = const {},
+    Set<String> mixinNames = const {},
+    Set<String> fieldNames = const {},
+  }) {
+    filter = (e) {
+      if (e is ClassElement) {
+        return classNames.contains(e.name);
+      } else if (e is ConstructorElement) {
+        return false;
+      } else if (e is EnumElement) {
+        return enumNames.contains(e.name);
+      } else if (e is ExtensionTypeElement) {
+        return extensionTypeNames.contains(e.name);
+      } else if (e is FieldElement) {
+        return fieldNames.isEmpty || fieldNames.contains(e.name);
+      } else if (e is MixinElement) {
+        return mixinNames.contains(e.name);
+      } else if (e is PartElement) {
+        return false;
+      } else if (e is PropertyAccessorElement) {
+        return false;
+      }
+      return true;
+    };
+  }
+}
diff --git a/pkg/analyzer/test/src/summary/elements/extension_test.dart b/pkg/analyzer/test/src/summary/elements/extension_test.dart
new file mode 100644
index 0000000..a557870
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/extension_test.dart
@@ -0,0 +1,2577 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ExtensionElementTest_keepLinking);
+    defineReflectiveTests(ExtensionElementTest_fromBytes);
+    defineReflectiveTests(ExtensionElementTest_augmentation_keepLinking);
+    defineReflectiveTests(ExtensionElementTest_augmentation_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class ExtensionElementTest extends ElementsBaseTest {
+  test_extension_documented_tripleSlash() async {
+    var library = await buildLibrary('''
+/// aaa
+/// bbbb
+/// cc
+extension E on int {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        E @34
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// aaa\n/// bbbb\n/// cc
+          extendedType: int
+''');
+  }
+
+  test_extension_field_inferredType_const() async {
+    var library = await buildLibrary('''
+extension E on int {
+  static const x = 0;
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        E @10
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          fields
+            static const x @36
+              reference: <testLibraryFragment>::@extension::E::@field::x
+              enclosingElement: <testLibraryFragment>::@extension::E
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @40
+                  staticType: int
+          accessors
+            synthetic static get x @-1
+              reference: <testLibraryFragment>::@extension::E::@getter::x
+              enclosingElement: <testLibraryFragment>::@extension::E
+              returnType: int
+''');
+  }
+
+  test_extension_typeParameters_hasBound() async {
+    var library = await buildLibrary('''
+extension E<T extends num> on int {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        E @10
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @12
+              bound: num
+              defaultType: num
+          extendedType: int
+''');
+  }
+
+  test_extension_typeParameters_noBound() async {
+    var library = await buildLibrary('''
+extension E<T> on int {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        E @10
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @12
+              defaultType: dynamic
+          extendedType: int
+''');
+  }
+
+  test_metadata_extension_scope() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+extension E<@foo T> on int {
+  static const foo = 1;
+  @foo
+  void bar() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        E @31
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            covariant T @38
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @33
+                  name: SimpleIdentifier
+                    token: foo @34
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          extendedType: int
+          fields
+            static const foo @65
+              reference: <testLibraryFragment>::@extension::E::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::E
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 1 @71
+                  staticType: int
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extension::E::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::E
+              returnType: int
+          methods
+            bar @88
+              reference: <testLibraryFragment>::@extension::E::@method::bar
+              enclosingElement: <testLibraryFragment>::@extension::E
+              metadata
+                Annotation
+                  atSign: @ @76
+                  name: SimpleIdentifier
+                    token: foo @77
+                    staticElement: <testLibraryFragment>::@extension::E::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@extension::E::@getter::foo
+              returnType: void
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_extensionDeclaration() async {
+    var library = await buildLibrary(r'''
+const a = null;
+class A {}
+@a
+@Object()
+extension E on A {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @22
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      extensions
+        E @50
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @27
+              name: SimpleIdentifier
+                token: a @28
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+            Annotation
+              atSign: @ @30
+              name: SimpleIdentifier
+                token: Object @31
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @37
+                rightParenthesis: ) @38
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          extendedType: A
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_nonSynthetic_extension_getter() async {
+    var library = await buildLibrary(r'''
+extension E on int {
+  int get foo => 0;
+}
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        E @10
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@extension::E::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::E
+              type: int
+              nonSynthetic: <testLibraryFragment>::@extension::E::@getter::foo
+          accessors
+            get foo @31
+              reference: <testLibraryFragment>::@extension::E::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::E
+              returnType: int
+              nonSynthetic: <testLibraryFragment>::@extension::E::@getter::foo
+''');
+  }
+
+  test_nonSynthetic_extension_setter() async {
+    var library = await buildLibrary(r'''
+extension E on int {
+  set foo(int value) {}
+}
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        E @10
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@extension::E::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::E
+              type: int
+              nonSynthetic: <testLibraryFragment>::@extension::E::@setter::foo
+          accessors
+            set foo= @27
+              reference: <testLibraryFragment>::@extension::E::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extension::E
+              parameters
+                requiredPositional value @35
+                  type: int
+                  nonSynthetic: <testLibraryFragment>::@extension::E::@setter::foo::@parameter::value
+              returnType: void
+              nonSynthetic: <testLibraryFragment>::@extension::E::@setter::foo
+''');
+  }
+}
+
+abstract class ExtensionElementTest_augmentation extends ElementsBaseTest {
+  test_augmentationTarget() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment extension A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment extension A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {}
+''');
+
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          augmented
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @72
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      extensions
+        augment A @44
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+  exportedReferences
+    declared <testLibraryFragment>::@extension::A
+  exportNamespace
+    A: <testLibraryFragment>::@extension::A
+''');
+  }
+
+  test_augmentationTarget_no2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment extension A {
+  void foo1() {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment extension A {
+  void foo2() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @72
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          extendedType: InvalidType
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          methods
+            foo1 @83
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: void
+          augmented
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::foo1
+              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@method::foo2
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      extensions
+        augment A @44
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          methods
+            foo2 @55
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@method::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmented_field_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            static foo @59
+              reference: <testLibraryFragment>::@extension::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extension::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extension::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibraryFragment>::@extension::A::@getter::foo
+              <testLibraryFragment>::@extension::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          fields
+            augment static foo @72
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static int foo = 1;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+extension A on int {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @60
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            static foo @84
+              reference: <testLibraryFragment>::@extension::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extension::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extension::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibraryFragment>::@extension::A::@getter::foo
+              <testLibraryFragment>::@extension::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          fields
+            augment static foo @72
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            augment static foo @72
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+''');
+  }
+
+  test_augmented_field_augment_field_afterGetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static int get foo => 1;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+extension A on int {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @60
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            static foo @84
+              reference: <testLibraryFragment>::@extension::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extension::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extension::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@extension::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          accessors
+            augment static get foo @76
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@extension::A::@getter::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            augment static foo @72
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_afterSetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static set foo(int _) {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+extension A on int {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @60
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            static foo @84
+              reference: <testLibraryFragment>::@extension::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extension::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extension::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibraryFragment>::@extension::A::@getter::foo
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          accessors
+            augment static set foo= @72
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              parameters
+                requiredPositional _ @80
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@extension::A::@setter::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            augment static foo @72
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_differentTypes() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static double foo = 1.2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            static foo @59
+              reference: <testLibraryFragment>::@extension::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extension::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extension::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibraryFragment>::@extension::A::@getter::foo
+              <testLibraryFragment>::@extension::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          fields
+            augment static foo @75
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              type: double
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
+''');
+  }
+
+  /// This is not allowed by the specification, but allowed syntactically,
+  /// so we need a way to handle it.
+  test_augmented_field_augment_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  static int get foo => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            synthetic static foo @-1
+              reference: <testLibraryFragment>::@extension::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              id: field_0
+              getter: getter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+          accessors
+            static get foo @63
+              reference: <testLibraryFragment>::@extension::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibraryFragment>::@extension::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          fields
+            augment static foo @72
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
+''');
+  }
+
+  test_augmented_fields_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  static int foo2 = 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  static int foo1 = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            static foo1 @59
+              reference: <testLibraryFragment>::@extension::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          accessors
+            synthetic static get foo1 @-1
+              reference: <testLibraryFragment>::@extension::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static set foo1= @-1
+              reference: <testLibraryFragment>::@extension::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _foo1 @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@extension::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
+            accessors
+              <testLibraryFragment>::@extension::A::@getter::foo1
+              <testLibraryFragment>::@extension::A::@setter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          fields
+            static foo2 @64
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_1
+          accessors
+            synthetic static get foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+            synthetic static set foo2= @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              parameters
+                requiredPositional _foo2 @-1
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_getters_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  int get foo2 => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  int get foo1 => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@extension::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              id: field_0
+              getter: getter_0
+          accessors
+            get foo1 @56
+              reference: <testLibraryFragment>::@extension::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@extension::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
+            accessors
+              <testLibraryFragment>::@extension::A::@getter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              type: int
+              id: field_1
+              getter: getter_1
+          accessors
+            get foo2 @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_getters_add_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A<T2> {
+  T2 get foo2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A<T1> on int {
+  T1 get foo1;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @37
+              defaultType: dynamic
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@extension::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: T1
+              id: field_0
+              getter: getter_0
+          accessors
+            abstract get foo1 @59
+              reference: <testLibraryFragment>::@extension::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: T1
+              id: getter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@extension::A::@field::foo1
+              FieldMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
+                augmentationSubstitution: {T2: T1}
+            accessors
+              <testLibraryFragment>::@extension::A::@getter::foo1
+              PropertyAccessorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
+                augmentationSubstitution: {T2: T1}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @49
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              type: T2
+              id: field_1
+              getter: getter_1
+          accessors
+            abstract get foo2 @64
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: T2
+              id: getter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_getters_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            static foo @59
+              reference: <testLibraryFragment>::@extension::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extension::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extension::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@extension::A::@field::foo
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@extension::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          accessors
+            augment static get foo @76
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@extension::A::@getter::foo
+''');
+  }
+
+  test_augmented_getters_augment_field2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static int get foo => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+extension A on int {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @60
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            static foo @84
+              reference: <testLibraryFragment>::@extension::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extension::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extension::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@extension::A::@field::foo
+            accessors
+              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@extension::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          accessors
+            augment static get foo @76
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@extension::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          accessors
+            augment static get foo @76
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_0
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+''');
+  }
+
+  test_augmented_getters_augment_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment int get foo1 => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  int get foo1 => 0;
+  int get foo2 => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@extension::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              id: field_0
+              getter: getter_0
+            synthetic foo2 @-1
+              reference: <testLibraryFragment>::@extension::A::@field::foo2
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              id: field_1
+              getter: getter_1
+          accessors
+            get foo1 @56
+              reference: <testLibraryFragment>::@extension::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo1
+            get foo2 @77
+              reference: <testLibraryFragment>::@extension::A::@getter::foo2
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@extension::A::@field::foo1
+              <testLibraryFragment>::@extension::A::@field::foo2
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo1
+              <testLibraryFragment>::@extension::A::@getter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          accessors
+            augment get foo1 @69
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@extension::A::@getter::foo1
+''');
+  }
+
+  test_augmented_getters_augment_getter2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment int get foo => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+extension A on int {
+  int get foo => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @60
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@extension::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              id: field_0
+              getter: getter_0
+          accessors
+            get foo @81
+              reference: <testLibraryFragment>::@extension::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@extension::A::@field::foo
+            accessors
+              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          accessors
+            augment get foo @69
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@extension::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          accessors
+            augment get foo @69
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_0
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
+''');
+  }
+
+  test_augmented_methods() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  void bar() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          methods
+            foo @53
+              reference: <testLibraryFragment>::@extension::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: void
+          augmented
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::bar
+              <testLibraryFragment>::@extension::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          methods
+            bar @58
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmented_methods_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment void foo1() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  void foo1() {}
+  void foo2() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          methods
+            foo1 @53
+              reference: <testLibraryFragment>::@extension::A::@method::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo1
+            foo2 @70
+              reference: <testLibraryFragment>::@extension::A::@method::foo2
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: void
+          augmented
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo1
+              <testLibraryFragment>::@extension::A::@method::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          methods
+            augment foo1 @66
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@extension::A::@method::foo1
+''');
+  }
+
+  test_augmented_methods_augment2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment extension A {
+  augment void foo() {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment extension A {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          methods
+            foo @53
+              reference: <testLibraryFragment>::@extension::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
+          augmented
+            methods
+              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @72
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          methods
+            augment foo @91
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@extension::A::@method::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      extensions
+        augment A @44
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          methods
+            augment foo @63
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
+''');
+  }
+
+  test_augmented_methods_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A<T2> {
+  T2 bar() => throw 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A<T> on int {
+  T foo() => throw 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @37
+              defaultType: dynamic
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          methods
+            foo @53
+              reference: <testLibraryFragment>::@extension::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: T
+          augmented
+            methods
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::bar
+                augmentationSubstitution: {T2: T}
+              <testLibraryFragment>::@extension::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @49
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          methods
+            bar @60
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: T2
+''');
+  }
+
+  test_augmented_methods_generic_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A<T2> {
+  augment T2 foo() => throw 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A<T> on int {
+  T foo() => throw 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @37
+              defaultType: dynamic
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          methods
+            foo @53
+              reference: <testLibraryFragment>::@extension::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: T
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
+          augmented
+            methods
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
+                augmentationSubstitution: {T2: T}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @49
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          methods
+            augment foo @68
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: T2
+              augmentationTarget: <testLibraryFragment>::@extension::A::@method::foo
+''');
+  }
+
+  test_augmented_methods_typeParameterCountMismatch() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A<T> {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  void foo() {}
+  void bar() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          methods
+            foo @53
+              reference: <testLibraryFragment>::@extension::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
+            bar @69
+              reference: <testLibraryFragment>::@extension::A::@method::bar
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: void
+          augmented
+            methods
+              <testLibraryFragment>::@extension::A::@method::bar
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
+                augmentationSubstitution: {T: InvalidType}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T @49
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          methods
+            augment foo @69
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@extension::A::@method::foo
+''');
+  }
+
+  test_augmented_setters_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  set foo2(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  set foo1(int _) {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@extension::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              id: field_0
+              setter: setter_0
+          accessors
+            set foo1= @52
+              reference: <testLibraryFragment>::@extension::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _ @61
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            fields
+              <testLibraryFragment>::@extension::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
+            accessors
+              <testLibraryFragment>::@extension::A::@setter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              type: int
+              id: field_1
+              setter: setter_1
+          accessors
+            set foo2= @57
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              parameters
+                requiredPositional _ @66
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_setters_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment static set foo(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            static foo @59
+              reference: <testLibraryFragment>::@extension::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extension::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extension::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@extension::A::@field::foo
+            accessors
+              <testLibraryFragment>::@extension::A::@getter::foo
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          accessors
+            augment static set foo= @72
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              parameters
+                requiredPositional _ @80
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@extension::A::@setter::foo
+''');
+  }
+
+  test_augmented_setters_augment_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension A {
+  augment set foo1(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension A on int {
+  set foo1(int _) {}
+  set foo2(int _) {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @35
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@extension::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              id: field_0
+              setter: setter_0
+            synthetic foo2 @-1
+              reference: <testLibraryFragment>::@extension::A::@field::foo2
+              enclosingElement: <testLibraryFragment>::@extension::A
+              type: int
+              id: field_1
+              setter: setter_1
+          accessors
+            set foo1= @52
+              reference: <testLibraryFragment>::@extension::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _ @61
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo1
+            set foo2= @73
+              reference: <testLibraryFragment>::@extension::A::@setter::foo2
+              enclosingElement: <testLibraryFragment>::@extension::A
+              parameters
+                requiredPositional _ @82
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@extension::A::@field::foo1
+              <testLibraryFragment>::@extension::A::@field::foo2
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo1
+              <testLibraryFragment>::@extension::A::@setter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+          accessors
+            augment set foo1= @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+              parameters
+                requiredPositional _ @74
+                  type: int
+              returnType: void
+              id: setter_2
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@extension::A::@setter::foo1
+''');
+  }
+
+  test_augmentedBy_class2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+
+extension A on int {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @61
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTargetAny: <testLibraryFragment>::@extension::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTargetAny: <testLibraryFragment>::@extension::A
+''');
+  }
+
+  test_augmentedBy_class_extension() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+
+augment extension A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+
+extension A on int {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        A @61
+          reference: <testLibraryFragment>::@extension::A
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          augmented
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTargetAny: <testLibraryFragment>::@extension::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensions
+        augment A @48
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@extension::A
+''');
+  }
+}
+
+@reflectiveTest
+class ExtensionElementTest_augmentation_fromBytes
+    extends ExtensionElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class ExtensionElementTest_augmentation_keepLinking
+    extends ExtensionElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+@reflectiveTest
+class ExtensionElementTest_fromBytes extends ExtensionElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class ExtensionElementTest_keepLinking extends ExtensionElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/extension_type_test.dart b/pkg/analyzer/test/src/summary/elements/extension_type_test.dart
new file mode 100644
index 0000000..4dbd7e7
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/extension_type_test.dart
@@ -0,0 +1,5343 @@
+// Copyright (c) 2024, 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/element.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../element_text.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ExtensionTypeElementTest_keepLinking);
+    defineReflectiveTests(ExtensionTypeElementTest_fromBytes);
+    defineReflectiveTests(ExtensionTypeElementTest_augmentation_keepLinking);
+    defineReflectiveTests(ExtensionTypeElementTest_augmentation_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+mixin ExtensionTypeElementMixin on ElementsBaseTest {
+  test_constructor_const() async {
+    var library = await buildLibrary(r'''
+extension type const A(int it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @21
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @27
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @27
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_constructor_named() async {
+    var library = await buildLibrary(r'''
+extension type A.named(int it) {}
+''');
+
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 33
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::named
+          typeErasure: int
+          fields
+            final it @27
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              codeOffset: 23
+              codeLength: 6
+              type: int
+          constructors
+            named @17
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              codeOffset: 16
+              codeLength: 14
+              periodOffset: 16
+              nameEnd: 22
+              parameters
+                requiredPositional final this.it @27
+                  type: int
+                  codeOffset: 23
+                  codeLength: 6
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_constructor_secondary_fieldFormalParameter() async {
+    var library = await buildLibrary(r'''
+extension type A(num it) {
+  A.named(this.it);
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: num
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: num
+          constructors
+            @15
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @21
+                  type: num
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+            named @31
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              periodOffset: 30
+              nameEnd: 36
+              parameters
+                requiredPositional final this.it @42
+                  type: num
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: num
+''');
+  }
+
+  test_constructor_secondary_fieldFormalParameter_typed() async {
+    var library = await buildLibrary(r'''
+extension type A(num it) {
+  A.named(int this.it);
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: num
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: num
+          constructors
+            @15
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @21
+                  type: num
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+            named @31
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              periodOffset: 30
+              nameEnd: 36
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: num
+''');
+  }
+
+  test_constructor_secondary_fieldInitializer() async {
+    var library = await buildLibrary(r'''
+extension type A(num it) {
+  const A.named(int a) : it = a;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: num
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: num
+          constructors
+            @15
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @21
+                  type: num
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+            const named @37
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              periodOffset: 36
+              nameEnd: 42
+              parameters
+                requiredPositional a @47
+                  type: int
+              constantInitializers
+                ConstructorFieldInitializer
+                  fieldName: SimpleIdentifier
+                    token: it @52
+                    staticElement: <testLibraryFragment>::@extensionType::A::@field::it
+                    staticType: null
+                  equals: = @55
+                  expression: SimpleIdentifier
+                    token: a @57
+                    staticElement: <testLibraryFragment>::@extensionType::A::@constructor::named::@parameter::a
+                    staticType: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: num
+''');
+  }
+
+  test_constructor_unnamed() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {}
+''');
+
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 27
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              codeOffset: 17
+              codeLength: 6
+              type: int
+          constructors
+            @15
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              codeOffset: 16
+              codeLength: 8
+              parameters
+                requiredPositional final this.it @21
+                  type: int
+                  codeOffset: 17
+                  codeLength: 6
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_documentation() async {
+    var library = await buildLibrary(r'''
+/// Docs
+extension type A(int it) {
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @24
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Docs
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @30
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @24
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @30
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_field_const_typed() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {
+  static const int foo = 0;
+}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+            static const foo @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @52
+                  staticType: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_field_const_untyped() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {
+  static const foo = 0;
+}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+            static const foo @42
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @48
+                  staticType: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_field_instance_untyped() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {
+  final foo = 0;
+}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+            final foo @35
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: false
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_field_metadata() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+const foo = 0;
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+extension type A(@foo int it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        A @32
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @43
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              metadata
+                Annotation
+                  atSign: @ @34
+                  name: SimpleIdentifier
+                    token: foo @35
+                    staticElement: package:test/a.dart::<fragment>::@getter::foo
+                    staticType: null
+                  element: package:test/a.dart::<fragment>::@getter::foo
+              type: int
+          constructors
+            @32
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @43
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_getter() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {
+  int get foo => 0;
+}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+            get foo @37
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_interfaces_class() async {
+    var library = await buildLibrary(r'''
+class A {}
+class B {}
+class C implements A, B {}
+extension type X(C it) implements A, B {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+        class B @17
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+        class C @28
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            A
+            B
+      extensionTypes
+        X @64
+          reference: <testLibraryFragment>::@extensionType::X
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::X::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::X::@constructor::new
+          typeErasure: C
+          interfaces
+            A
+            B
+          fields
+            final it @68
+              reference: <testLibraryFragment>::@extensionType::X::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::X
+              type: C
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::X::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::X
+              returnType: C
+''');
+  }
+
+  test_interfaces_cycle2() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) implements B {}
+extension type B(int it) implements A {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        hasImplementsSelfReference A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          interfaces
+            Object
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+        hasImplementsSelfReference B @56
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: int
+          interfaces
+            Object
+          fields
+            final it @62
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: int
+''');
+  }
+
+  test_interfaces_cycle_self() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) implements A {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        hasImplementsSelfReference A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          interfaces
+            Object
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_interfaces_extensionType() async {
+    var library = await buildLibrary(r'''
+extension type A(num it) {}
+extension type B(int it) implements A {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: num
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: num
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: num
+        B @43
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: int
+          interfaces
+            A
+          fields
+            final it @49
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: int
+''');
+  }
+
+  test_interfaces_futureOr() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) implements num, FutureOr<int> {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          interfaces
+            num
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_interfaces_implicitObjectQuestion() async {
+    var library = await buildLibrary(r'''
+extension type X(int? it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        X @15
+          reference: <testLibraryFragment>::@extensionType::X
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::X::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::X::@constructor::new
+          typeErasure: int?
+          fields
+            final it @22
+              reference: <testLibraryFragment>::@extensionType::X::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::X
+              type: int?
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::X::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::X
+              returnType: int?
+''');
+  }
+
+  test_interfaces_implicitObjectQuestion_fromTypeParameter() async {
+    var library = await buildLibrary(r'''
+extension type A<T>(T it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @17
+              defaultType: dynamic
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: T
+          fields
+            final it @22
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: T
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: T
+''');
+  }
+
+  test_interfaces_void() async {
+    var library = await buildLibrary(r'''
+typedef A = void;
+extension type X(int it) implements A, num {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        X @33
+          reference: <testLibraryFragment>::@extensionType::X
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::X::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::X::@constructor::new
+          typeErasure: int
+          interfaces
+            num
+          fields
+            final it @39
+              reference: <testLibraryFragment>::@extensionType::X::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::X
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::X::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::X
+              returnType: int
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: void
+''');
+  }
+
+  test_isPromotable_representationField_private() async {
+    var library = await buildLibrary(r'''
+extension type A(int? _it) {}
+
+class B {
+  int _it = 0;
+}
+
+class C {
+  int get _it => 0;
+}
+''');
+
+    configuration
+      ..forPromotableFields(extensionTypeNames: {'A'})
+      ..withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::_it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int?
+          fields
+            final promotable _it @22
+              reference: <testLibraryFragment>::@extensionType::A::@field::_it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int?
+  fieldNameNonPromotabilityInfo
+    _it
+      conflictingFields
+        <testLibraryFragment>::@class::B::@field::_it
+      conflictingGetters
+        <testLibraryFragment>::@class::C::@getter::_it
+''');
+  }
+
+  test_metadata() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+const foo = 0;
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+@foo
+extension type A(int it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        A @37
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @17
+              name: SimpleIdentifier
+                token: foo @18
+                staticElement: package:test/a.dart::<fragment>::@getter::foo
+                staticType: null
+              element: package:test/a.dart::<fragment>::@getter::foo
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @43
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @37
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @43
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_method() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {
+  void foo(int a) {}
+}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          methods
+            foo @34
+              reference: <testLibraryFragment>::@extensionType::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional a @42
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_method_defaultFormalParameter_defaultValue() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {
+  void foo({int a = 0}) {}
+}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          methods
+            foo @34
+              reference: <testLibraryFragment>::@extensionType::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                optionalNamed default a @43
+                  reference: <testLibraryFragment>::@extensionType::A::@method::foo::@parameter::a
+                  type: int
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 0 @47
+                      staticType: int
+              returnType: void
+''');
+  }
+
+  test_noField() async {
+    var library = await buildLibrary(r'''
+extension type A() {}
+''');
+
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 21
+          representation: <testLibraryFragment>::@extensionType::A::@field::<empty>
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: InvalidType
+          fields
+            final <empty> @17
+              reference: <testLibraryFragment>::@extensionType::A::@field::<empty>
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              codeOffset: 17
+              codeLength: 0
+              type: InvalidType
+          constructors
+            @15
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              codeOffset: 16
+              codeLength: 2
+              parameters
+                requiredPositional final this.<empty> @17
+                  type: InvalidType
+                  codeOffset: 17
+                  codeLength: 0
+                  field: <testLibraryFragment>::@extensionType::A::@field::<empty>
+          accessors
+            synthetic get <empty> @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::<empty>
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: InvalidType
+''');
+  }
+
+  test_notSimplyBounded_self() async {
+    var library = await buildLibrary(r'''
+extension type A<T extends A>(int it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        notSimplyBounded A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @17
+              bound: A<dynamic>
+              defaultType: dynamic
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @34
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_setter() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {
+  set foo(double _) {}
+}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: double
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+            set foo= @33
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _ @44
+                  type: double
+              returnType: void
+''');
+  }
+
+  test_typeErasure_hasExtension_cycle2_direct() async {
+    var library = await buildLibrary(r'''
+extension type A(B it) {}
+
+extension type B(A it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        hasRepresentationSelfReference A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: InvalidType
+          fields
+            final it @19
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: InvalidType
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: InvalidType
+        hasRepresentationSelfReference B @42
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: InvalidType
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: InvalidType
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: InvalidType
+''');
+  }
+
+  test_typeErasure_hasExtension_cycle2_typeArgument() async {
+    var library = await buildLibrary(r'''
+extension type A(B it) {}
+
+extension type B(List<B> it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: InvalidType
+          fields
+            final it @19
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: B
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: B
+        hasRepresentationSelfReference B @42
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: InvalidType
+          fields
+            final it @52
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: InvalidType
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: InvalidType
+''');
+  }
+
+  test_typeErasure_hasExtension_cycle_self() async {
+    var library = await buildLibrary(r'''
+extension type A(A it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        hasRepresentationSelfReference A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: InvalidType
+          fields
+            final it @19
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: InvalidType
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: InvalidType
+''');
+  }
+
+  test_typeErasure_hasExtension_functionType() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {}
+
+extension type B(A Function(A a) it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+        B @44
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: int Function(int)
+          fields
+            final it @62
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: A Function(A)
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: A Function(A)
+''');
+  }
+
+  test_typeErasure_hasExtension_interfaceType() async {
+    var library = await buildLibrary(r'''
+extension type A<T>(T it) {}
+
+extension type B(A<double> it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @17
+              defaultType: dynamic
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: T
+          fields
+            final it @22
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: T
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: T
+        B @45
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: double
+          fields
+            final it @57
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: A<double>
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: A<double>
+''');
+  }
+
+  test_typeErasure_hasExtension_interfaceType_typeArgument() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {}
+
+extension type B(List<A> it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+        B @44
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: List<int>
+          fields
+            final it @54
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: List<A>
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: List<A>
+''');
+  }
+
+  test_typeErasure_notExtension() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @21
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+''');
+  }
+
+  test_typeParameters() async {
+    var library = await buildLibrary(r'''
+extension type A<T extends num, U>(Map<T, U> it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @15
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @17
+              bound: num
+              defaultType: num
+            covariant U @32
+              defaultType: dynamic
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: Map<T, U>
+          fields
+            final it @45
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: Map<T, U>
+          constructors
+            @15
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @45
+                  type: Map<T, U>
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: Map<T, U>
+''');
+  }
+}
+
+abstract class ExtensionTypeElementTest_augmentation extends ElementsBaseTest {
+  test_augmentationTarget() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment extension type A(int it) {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment extension type A(int it) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {}
+''');
+
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @77
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      extensionTypes
+        augment A @49
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+  exportedReferences
+    declared <testLibraryFragment>::@extensionType::A
+  exportNamespace
+    A: <testLibraryFragment>::@extensionType::A
+''');
+  }
+
+  test_augmentationTarget_no2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment extension type A(int it) {
+  void foo1() {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment extension type A(int it) {
+  void foo2() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @77
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          representation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
+          primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructorAugmentation::new
+          typeErasure: int
+          fields
+            final it @83
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              type: int
+          constructors
+            augment @77
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructorAugmentation::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              parameters
+                requiredPositional final this.it @83
+                  type: int
+                  field: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::it
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: int
+          methods
+            foo1 @96
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: void
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructorAugmentation::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::it
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::foo1
+              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@method::foo2
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      extensionTypes
+        augment A @49
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          methods
+            foo2 @68
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@method::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmented_constructors_add_named() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  A.named();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          constructors
+            named @68
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              periodOffset: 67
+              nameEnd: 73
+''');
+  }
+
+  test_augmented_constructors_add_named_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A<T2>(int it) {
+  A.named(T2 a);
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A<T1>(int it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @42
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @50
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @50
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+              ConstructorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
+                augmentationSubstitution: {T2: T1}
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @54
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          constructors
+            named @72
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              periodOffset: 71
+              nameEnd: 77
+              parameters
+                requiredPositional a @81
+                  type: T2
+''');
+  }
+
+  test_augmented_constructors_add_unnamed_hasNamed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  A();
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A.named(int it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::named
+          typeErasure: int
+          fields
+            final it @52
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            named @42
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              periodOffset: 41
+              nameEnd: 47
+              parameters
+                requiredPositional final this.it @52
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::new
+              <testLibraryFragment>::@extensionType::A::@constructor::named
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          constructors
+            @66
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+''');
+  }
+
+  test_augmented_field_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            static foo @65
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_1
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::foo
+              <testLibraryFragment>::@extensionType::A::@setter::foo
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          fields
+            augment static foo @85
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static int foo = 1;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+extension type A(int it) {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @65
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @71
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            static foo @90
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+          constructors
+            @65
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @71
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_1
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::foo
+              <testLibraryFragment>::@extensionType::A::@setter::foo
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          fields
+            augment static foo @85
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          fields
+            augment static foo @85
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_3
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+''');
+  }
+
+  test_augmented_field_augment_field_afterGetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static int get foo => 1;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+extension type A(int it) {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @65
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @71
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            static foo @90
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+          constructors
+            @65
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @71
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_1
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@setter::foo
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          accessors
+            augment static get foo @89
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_1
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          fields
+            augment static foo @85
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_afterSetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static set foo(int _) {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+extension type A(int it) {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @65
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @71
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            static foo @90
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+          constructors
+            @65
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @71
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_1
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::foo
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          accessors
+            augment static set foo= @85
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              parameters
+                requiredPositional _ @93
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@setter::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          fields
+            augment static foo @85
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_differentTypes() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static double foo = 1.2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            static foo @65
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_1
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::foo
+              <testLibraryFragment>::@extensionType::A::@setter::foo
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          fields
+            augment static foo @88
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              type: double
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
+''');
+  }
+
+  /// This is not allowed by the specification, but allowed syntactically,
+  /// so we need a way to handle it.
+  test_augmented_field_augment_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  static int get foo => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            synthetic static foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_1
+              getter: getter_1
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            static get foo @69
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::foo
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          fields
+            augment static foo @85
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
+''');
+  }
+
+  test_augmented_fields_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  static int foo2 = 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  static int foo1 = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            static foo1 @65
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_0
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static get foo1 @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+            synthetic static set foo1= @-1
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _foo1 @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::foo1
+              <testLibraryFragment>::@extensionType::A::@setter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          fields
+            static foo2 @77
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              getter: getter_2
+              setter: setter_1
+          accessors
+            synthetic static get foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+            synthetic static set foo2= @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              parameters
+                requiredPositional _foo2 @-1
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_2
+''');
+  }
+
+  test_augmented_getters_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  int get foo2 => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  int get foo1 => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_1
+              getter: getter_1
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            get foo1 @62
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              type: int
+              id: field_2
+              getter: getter_2
+          accessors
+            get foo2 @74
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+''');
+  }
+
+  test_augmented_getters_add_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A<T2>(int it) {
+  T2 get foo2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A<T1>(int it) {
+  T1 get foo1;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @42
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @50
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: T1
+              id: field_1
+              getter: getter_1
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @50
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            abstract get foo1 @65
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: T1
+              id: getter_1
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::foo1
+              FieldMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
+                augmentationSubstitution: {T2: T1}
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::foo1
+              PropertyAccessorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
+                augmentationSubstitution: {T2: T1}
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @54
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              type: T2
+              id: field_2
+              getter: getter_2
+          accessors
+            abstract get foo2 @77
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: T2
+              id: getter_2
+              variable: field_2
+''');
+  }
+
+  test_augmented_getters_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            static foo @65
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_0
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::foo
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@setter::foo
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          accessors
+            augment static get foo @89
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_1
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
+''');
+  }
+
+  test_augmented_getters_augment_field2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static int get foo => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+extension type A(int it) {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @65
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @71
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            static foo @90
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_0
+          constructors
+            @65
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @71
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::foo
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@setter::foo
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          accessors
+            augment static get foo @89
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_1
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          accessors
+            augment static get foo @89
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+              returnType: int
+              id: getter_3
+              variable: field_1
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+''');
+  }
+
+  test_augmented_getters_augment_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment int get foo1 => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  int get foo1 => 0;
+  int get foo2 => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_1
+              getter: getter_1
+            synthetic foo2 @-1
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo2
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_2
+              getter: getter_2
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            get foo1 @62
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo1
+            get foo2 @83
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo2
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_2
+              variable: field_2
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::foo1
+              <testLibraryFragment>::@extensionType::A::@field::foo2
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo1
+              <testLibraryFragment>::@extensionType::A::@getter::foo2
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          accessors
+            augment get foo1 @82
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: int
+              id: getter_3
+              variable: field_1
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo1
+''');
+  }
+
+  test_augmented_getters_augment_getter2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment int get foo => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+extension type A(int it) {
+  int get foo => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @65
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @71
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_1
+              getter: getter_1
+          constructors
+            @65
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @71
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            get foo @87
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::foo
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          accessors
+            augment get foo @82
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_1
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          accessors
+            augment get foo @82
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+              returnType: int
+              id: getter_3
+              variable: field_1
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
+''');
+  }
+
+  test_augmented_interfaces() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) implements I2 {}
+extension type I2(int it) {}
+''');
+
+    configuration.withConstructors = false;
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) implements I1 {}
+extension type I1(int it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          interfaces
+            I1
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          augmented
+            interfaces
+              I1
+              I2
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+        I1 @82
+          reference: <testLibraryFragment>::@extensionType::I1
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::I1::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
+          typeErasure: int
+          fields
+            final it @89
+              reference: <testLibraryFragment>::@extensionType::I1::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::I1
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::I1::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::I1
+              returnType: int
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          interfaces
+            I2
+        I2 @94
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
+          primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
+          typeErasure: int
+          fields
+            final it @101
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+              returnType: int
+''');
+  }
+
+  test_augmented_interfaces_chain() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment extension type A(int it) implements I2 {}
+extension type I2(int it) {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment extension type A(int it) implements I3 {}
+extension type I3(int it) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) implements I1 {}
+extension type I1(int it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          interfaces
+            I1
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          augmented
+            interfaces
+              I1
+              I2
+              I3
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+        I1 @82
+          reference: <testLibraryFragment>::@extensionType::I1
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::I1::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
+          typeErasure: int
+          fields
+            final it @89
+              reference: <testLibraryFragment>::@extensionType::I1::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::I1
+              type: int
+          constructors
+            @82
+              reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::I1
+              parameters
+                requiredPositional final this.it @89
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::I1::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::I1::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::I1
+              returnType: int
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @77
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          interfaces
+            I2
+        I2 @119
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
+          primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
+          typeErasure: int
+          fields
+            final it @126
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+              type: int
+          constructors
+            @119
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+              parameters
+                requiredPositional final this.it @126
+                  type: int
+                  field: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+              returnType: int
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      extensionTypes
+        augment A @49
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          interfaces
+            I3
+        I3 @91
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          representation: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@field::it
+          primaryConstructor: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@constructor::new
+          typeErasure: int
+          fields
+            final it @98
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@field::it
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
+              type: int
+          constructors
+            @91
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
+              parameters
+                requiredPositional final this.it @98
+                  type: int
+                  field: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@getter::it
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
+              returnType: int
+''');
+  }
+
+  test_augmented_interfaces_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A<T2>(int it) implements I2<T2> {}
+extension type I2<E>(int it) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A<T>(int it) implements I1 {}
+extension type I1(int it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @42
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          interfaces
+            I1
+          fields
+            final it @49
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @49
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          augmented
+            interfaces
+              I1
+              I2<T>
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+        I1 @85
+          reference: <testLibraryFragment>::@extensionType::I1
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::I1::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
+          typeErasure: int
+          fields
+            final it @92
+              reference: <testLibraryFragment>::@extensionType::I1::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::I1
+              type: int
+          constructors
+            @85
+              reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::I1
+              parameters
+                requiredPositional final this.it @92
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::I1::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::I1::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::I1
+              returnType: int
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @54
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          interfaces
+            I2<T2>
+        I2 @102
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant E @105
+              defaultType: dynamic
+          representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
+          primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
+          typeErasure: int
+          fields
+            final it @112
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+              type: int
+          constructors
+            @102
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+              parameters
+                requiredPositional final this.it @112
+                  type: int
+                  field: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+              returnType: int
+''');
+  }
+
+  test_augmented_interfaces_generic_mismatch() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A<T2, T3>(int it) implements I2<T2> {}
+extension type I2<E>(int it) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A<T>(int it) implements I1 {}
+extension type I1(int it) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @42
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          interfaces
+            I1
+          fields
+            final it @49
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @49
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          augmented
+            interfaces
+              I1
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+        I1 @85
+          reference: <testLibraryFragment>::@extensionType::I1
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::I1::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
+          typeErasure: int
+          fields
+            final it @92
+              reference: <testLibraryFragment>::@extensionType::I1::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::I1
+              type: int
+          constructors
+            @85
+              reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::I1
+              parameters
+                requiredPositional final this.it @92
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::I1::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::I1::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::I1
+              returnType: int
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @54
+              defaultType: dynamic
+            covariant T3 @58
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          interfaces
+            I2<T2>
+        I2 @106
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant E @109
+              defaultType: dynamic
+          representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
+          primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
+          typeErasure: int
+          fields
+            final it @116
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+              type: int
+          constructors
+            @106
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+              parameters
+                requiredPositional final this.it @116
+                  type: int
+                  field: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+              returnType: int
+''');
+  }
+
+  test_augmented_methods() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  void bar() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          methods
+            foo @59
+              reference: <testLibraryFragment>::@extensionType::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: void
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
+              <testLibraryFragment>::@extensionType::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          methods
+            bar @71
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmented_methods_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment void foo1() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  void foo1() {}
+  void foo2() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          methods
+            foo1 @59
+              reference: <testLibraryFragment>::@extensionType::A::@method::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo1
+            foo2 @76
+              reference: <testLibraryFragment>::@extensionType::A::@method::foo2
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: void
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo1
+              <testLibraryFragment>::@extensionType::A::@method::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          methods
+            augment foo1 @79
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo1
+''');
+  }
+
+  test_augmented_methods_augment2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment extension type A(int it) {
+  augment void foo() {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment extension type A(int it) {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          methods
+            foo @59
+              reference: <testLibraryFragment>::@extensionType::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+            methods
+              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @77
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          methods
+            augment foo @104
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      extensionTypes
+        augment A @49
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          methods
+            augment foo @76
+              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+''');
+  }
+
+  test_augmented_methods_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A<T2>(int it) {
+  T2 bar() => throw 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A<T>(int it) {
+  T foo() => throw 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @42
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @49
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @49
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          methods
+            foo @59
+              reference: <testLibraryFragment>::@extensionType::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: T
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+            methods
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
+                augmentationSubstitution: {T2: T}
+              <testLibraryFragment>::@extensionType::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @54
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          methods
+            bar @73
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: T2
+''');
+  }
+
+  test_augmented_methods_generic_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A<T2>(int it) {
+  augment T2 foo() => throw 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A<T>(int it) {
+  T foo() => throw 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @42
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @49
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @49
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          methods
+            foo @59
+              reference: <testLibraryFragment>::@extensionType::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: T
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+            methods
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+                augmentationSubstitution: {T2: T}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @54
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          methods
+            augment foo @81
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: T2
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo
+''');
+  }
+
+  test_augmented_methods_typeParameterCountMismatch() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A<T>(int it) {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  void foo() {}
+  void bar() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          methods
+            foo @59
+              reference: <testLibraryFragment>::@extensionType::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+            bar @75
+              reference: <testLibraryFragment>::@extensionType::A::@method::bar
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: void
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+            methods
+              <testLibraryFragment>::@extensionType::A::@method::bar
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+                augmentationSubstitution: {T: InvalidType}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T @54
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          methods
+            augment foo @82
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo
+''');
+  }
+
+  test_augmented_setters_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  set foo2(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  set foo1(int _) {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_1
+              setter: setter_0
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            set foo1= @58
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _ @67
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_1
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@setter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              type: int
+              id: field_2
+              setter: setter_1
+          accessors
+            set foo2= @70
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              parameters
+                requiredPositional _ @79
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_2
+''');
+  }
+
+  test_augmented_setters_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment static set foo(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  static int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            static foo @65
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_0
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+            synthetic static set foo= @-1
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_1
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::foo
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::foo
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          accessors
+            augment static set foo= @85
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              parameters
+                requiredPositional _ @93
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@setter::foo
+''');
+  }
+
+  test_augmented_setters_augment_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment extension type A(int it) {
+  augment set foo1(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+extension type A(int it) {
+  set foo1(int _) {}
+  set foo2(int _) {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @40
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @46
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_0
+              getter: getter_0
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_1
+              setter: setter_0
+            synthetic foo2 @-1
+              reference: <testLibraryFragment>::@extensionType::A::@field::foo2
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+              id: field_2
+              setter: setter_1
+          constructors
+            @40
+              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional final this.it @46
+                  type: int
+                  field: <testLibraryFragment>::@extensionType::A::@field::it
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            set foo1= @58
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _ @67
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_1
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo1
+            set foo2= @79
+              reference: <testLibraryFragment>::@extensionType::A::@setter::foo2
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              parameters
+                requiredPositional _ @88
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_2
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::foo1
+              <testLibraryFragment>::@extensionType::A::@field::foo2
+              <testLibraryFragment>::@extensionType::A::@field::it
+            constructors
+              <testLibraryFragment>::@extensionType::A::@constructor::new
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo1
+              <testLibraryFragment>::@extensionType::A::@setter::foo2
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @52
+          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+          accessors
+            augment set foo1= @78
+              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+              parameters
+                requiredPositional _ @87
+                  type: int
+              returnType: void
+              id: setter_2
+              variable: field_1
+              augmentationTarget: <testLibraryFragment>::@extensionType::A::@setter::foo1
+''');
+  }
+
+  test_augmentedBy_class2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+
+extension type A(int it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @66
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @72
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTargetAny: <testLibraryFragment>::@extensionType::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTargetAny: <testLibraryFragment>::@extensionType::A
+''');
+  }
+
+  test_augmentedBy_class_extensionType() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+
+augment extension type A(int it) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+
+extension type A(int it) {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensionTypes
+        A @66
+          reference: <testLibraryFragment>::@extensionType::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          representation: <testLibraryFragment>::@extensionType::A::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
+          typeErasure: int
+          fields
+            final it @72
+              reference: <testLibraryFragment>::@extensionType::A::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::A::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::A
+              returnType: int
+          augmented
+            fields
+              <testLibraryFragment>::@extensionType::A::@field::it
+            accessors
+              <testLibraryFragment>::@extensionType::A::@getter::it
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTargetAny: <testLibraryFragment>::@extensionType::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      extensionTypes
+        augment A @53
+          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@extensionType::A
+''');
+  }
+}
+
+@reflectiveTest
+class ExtensionTypeElementTest_augmentation_fromBytes
+    extends ExtensionTypeElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class ExtensionTypeElementTest_augmentation_keepLinking
+    extends ExtensionTypeElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+@reflectiveTest
+class ExtensionTypeElementTest_fromBytes extends ElementsBaseTest
+    with ExtensionTypeElementMixin {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class ExtensionTypeElementTest_keepLinking extends ElementsBaseTest
+    with ExtensionTypeElementMixin {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+// TODO(scheglov): This is duplicate.
+extension on ElementTextConfiguration {
+  void forPromotableFields({
+    Set<String> classNames = const {},
+    Set<String> enumNames = const {},
+    Set<String> extensionTypeNames = const {},
+    Set<String> mixinNames = const {},
+    Set<String> fieldNames = const {},
+  }) {
+    filter = (e) {
+      if (e is ClassElement) {
+        return classNames.contains(e.name);
+      } else if (e is ConstructorElement) {
+        return false;
+      } else if (e is EnumElement) {
+        return enumNames.contains(e.name);
+      } else if (e is ExtensionTypeElement) {
+        return extensionTypeNames.contains(e.name);
+      } else if (e is FieldElement) {
+        return fieldNames.isEmpty || fieldNames.contains(e.name);
+      } else if (e is MixinElement) {
+        return mixinNames.contains(e.name);
+      } else if (e is PartElement) {
+        return false;
+      } else if (e is PropertyAccessorElement) {
+        return false;
+      }
+      return true;
+    };
+  }
+}
diff --git a/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart b/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart
new file mode 100644
index 0000000..f0e8a2b
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart
@@ -0,0 +1,626 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FormalParameterElementTest_keepLinking);
+    defineReflectiveTests(FormalParameterElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class FormalParameterElementTest extends ElementsBaseTest {
+  test_parameter() async {
+    var library = await buildLibrary('void main(int p) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        main @5
+          reference: <testLibraryFragment>::@function::main
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional p @14
+              type: int
+          returnType: void
+''');
+  }
+
+  test_parameter_covariant_explicit_named() async {
+    var library = await buildLibrary('''
+class A {
+  void m({covariant A a}) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            m @17
+              reference: <testLibraryFragment>::@class::A::@method::m
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                optionalNamed default covariant a @32
+                  reference: <testLibraryFragment>::@class::A::@method::m::@parameter::a
+                  type: A
+              returnType: void
+''');
+  }
+
+  test_parameter_covariant_explicit_positional() async {
+    var library = await buildLibrary('''
+class A {
+  void m([covariant A a]) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            m @17
+              reference: <testLibraryFragment>::@class::A::@method::m
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                optionalPositional default covariant a @32
+                  type: A
+              returnType: void
+''');
+  }
+
+  test_parameter_covariant_explicit_required() async {
+    var library = await buildLibrary('''
+class A {
+  void m(covariant A a) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            m @17
+              reference: <testLibraryFragment>::@class::A::@method::m
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional covariant a @31
+                  type: A
+              returnType: void
+''');
+  }
+
+  test_parameter_covariant_inherited() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  void f(covariant T t) {}
+}
+class B<T> extends A<T> {
+  void f(T t) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            f @20
+              reference: <testLibraryFragment>::@class::A::@method::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional covariant t @34
+                  type: T
+              returnType: void
+        class B @48
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @50
+              defaultType: dynamic
+          supertype: A<T>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: T}
+          methods
+            f @75
+              reference: <testLibraryFragment>::@class::B::@method::f
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional covariant t @79
+                  type: T
+              returnType: void
+''');
+  }
+
+  test_parameter_covariant_inherited_named() async {
+    var library = await buildLibrary('''
+class A {
+  void m({covariant A a}) {}
+}
+class B extends A {
+  void m({B a}) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            m @17
+              reference: <testLibraryFragment>::@class::A::@method::m
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                optionalNamed default covariant a @32
+                  reference: <testLibraryFragment>::@class::A::@method::m::@parameter::a
+                  type: A
+              returnType: void
+        class B @47
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+          methods
+            m @68
+              reference: <testLibraryFragment>::@class::B::@method::m
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                optionalNamed default covariant a @73
+                  reference: <testLibraryFragment>::@class::B::@method::m::@parameter::a
+                  type: B
+              returnType: void
+''');
+  }
+
+  test_parameter_parameters() async {
+    var library = await buildLibrary('class C { f(g(x, y)) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @10
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              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 buildLibrary('class C<A, B> { f(A g(B x)) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant A @8
+              defaultType: dynamic
+            covariant B @11
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @16
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional g @20
+                  type: A Function(B)
+                  parameters
+                    requiredPositional x @24
+                      type: B
+              returnType: dynamic
+''');
+  }
+
+  test_parameter_return_type() async {
+    var library = await buildLibrary('class C { f(int g()) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @10
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional g @16
+                  type: int Function()
+              returnType: dynamic
+''');
+  }
+
+  test_parameter_return_type_void() async {
+    var library = await buildLibrary('class C { f(void g()) {} }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @10
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional g @17
+                  type: void Function()
+              returnType: dynamic
+''');
+  }
+
+  test_parameter_typeParameters() async {
+    var library = await buildLibrary(r'''
+void f(T a<T, U>(U u)) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          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
+''');
+  }
+
+  test_parameterTypeNotInferred_constructor() async {
+    // Strong mode doesn't do type inference on constructor parameters, so it's
+    // ok that we don't store inferred type info for them in summaries.
+    var library = await buildLibrary('''
+class C {
+  C.positional([x = 1]);
+  C.named({x: 1});
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            positional @14
+              reference: <testLibraryFragment>::@class::C::@constructor::positional
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 13
+              nameEnd: 24
+              parameters
+                optionalPositional default x @26
+                  type: dynamic
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 1 @30
+                      staticType: int
+            named @39
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 38
+              nameEnd: 44
+              parameters
+                optionalNamed default x @46
+                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::x
+                  type: dynamic
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 1 @49
+                      staticType: int
+''');
+  }
+
+  test_parameterTypeNotInferred_initializingFormal() async {
+    // Strong mode doesn't do type inference on initializing formals, so it's
+    // ok that we don't store inferred type info for them in summaries.
+    var library = await buildLibrary('''
+class C {
+  var x;
+  C.positional([this.x = 1]);
+  C.named({this.x: 1});
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @16
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            positional @23
+              reference: <testLibraryFragment>::@class::C::@constructor::positional
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 22
+              nameEnd: 33
+              parameters
+                optionalPositional default final this.x @40
+                  type: dynamic
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 1 @44
+                      staticType: int
+                  field: <testLibraryFragment>::@class::C::@field::x
+            named @53
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 52
+              nameEnd: 58
+              parameters
+                optionalNamed default final this.x @65
+                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::x
+                  type: dynamic
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 1 @68
+                      staticType: int
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_parameterTypeNotInferred_staticMethod() async {
+    // Strong mode doesn't do type inference on parameters of static methods,
+    // so it's ok that we don't store inferred type info for them in summaries.
+    var library = await buildLibrary('''
+class C {
+  static void positional([x = 1]) {}
+  static void named({x: 1}) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            static positional @24
+              reference: <testLibraryFragment>::@class::C::@method::positional
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default x @36
+                  type: dynamic
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 1 @40
+                      staticType: int
+              returnType: void
+            static named @61
+              reference: <testLibraryFragment>::@class::C::@method::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalNamed default x @68
+                  reference: <testLibraryFragment>::@class::C::@method::named::@parameter::x
+                  type: dynamic
+                  constantInitializer
+                    IntegerLiteral
+                      literal: 1 @71
+                      staticType: int
+              returnType: void
+''');
+  }
+
+  test_parameterTypeNotInferred_topLevelFunction() async {
+    // Strong mode doesn't do type inference on parameters of top level
+    // functions, so it's ok that we don't store inferred type info for them in
+    // summaries.
+    var library = await buildLibrary('''
+void positional([x = 1]) {}
+void named({x: 1}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        positional @5
+          reference: <testLibraryFragment>::@function::positional
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalPositional default x @17
+              type: dynamic
+              constantInitializer
+                IntegerLiteral
+                  literal: 1 @21
+                  staticType: int
+          returnType: void
+        named @33
+          reference: <testLibraryFragment>::@function::named
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalNamed default x @40
+              reference: <testLibraryFragment>::@function::named::@parameter::x
+              type: dynamic
+              constantInitializer
+                IntegerLiteral
+                  literal: 1 @43
+                  staticType: int
+          returnType: void
+''');
+  }
+}
+
+@reflectiveTest
+class FormalParameterElementTest_fromBytes extends FormalParameterElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class FormalParameterElementTest_keepLinking
+    extends FormalParameterElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart b/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart
new file mode 100644
index 0000000..fd58279
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart
@@ -0,0 +1,876 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FunctionTypeAnnotationElementTest_keepLinking);
+    defineReflectiveTests(FunctionTypeAnnotationElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class FunctionTypeAnnotationElementTest extends ElementsBaseTest {
+  test_generic_function_type_nullability_none() async {
+    var library = await buildLibrary('''
+void Function() f;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static f @16
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: void Function()
+      accessors
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: void Function()
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: void Function()
+          returnType: void
+''');
+  }
+
+  test_generic_function_type_nullability_question() async {
+    var library = await buildLibrary('''
+void Function()? f;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static f @17
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: void Function()?
+      accessors
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: void Function()?
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: void Function()?
+          returnType: void
+''');
+  }
+
+  test_genericFunction_asFunctionReturnType() async {
+    var library = await buildLibrary(r'''
+int Function(int a, String b) f() => null;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @30
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function(int, String)
+''');
+  }
+
+  test_genericFunction_asFunctionTypedParameterReturnType() async {
+    var library = await buildLibrary(r'''
+void f(int Function(int a, String b) p(num c)) => null;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional p @37
+              type: int Function(int, String) Function(num)
+              parameters
+                requiredPositional c @43
+                  type: num
+          returnType: void
+''');
+  }
+
+  test_genericFunction_asGenericFunctionReturnType() async {
+    var library = await buildLibrary(r'''
+typedef F = void Function(String a) Function(int b);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function(String) Function(int)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional b @49
+                type: int
+            returnType: void Function(String)
+''');
+  }
+
+  test_genericFunction_asMethodReturnType() async {
+    var library = await buildLibrary(r'''
+class C {
+  int Function(int a, String b) m() => null;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            m @42
+              reference: <testLibraryFragment>::@class::C::@method::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int Function(int, String)
+''');
+  }
+
+  test_genericFunction_asParameterType() async {
+    var library = await buildLibrary(r'''
+void f(int Function(int a, String b) p) => null;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional p @37
+              type: int Function(int, String)
+          returnType: void
+''');
+  }
+
+  test_genericFunction_asTopLevelVariableType() async {
+    var library = await buildLibrary(r'''
+int Function(int a, String b) v;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static v @30
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int Function(int, String)
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function(int, String)
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: int Function(int, String)
+          returnType: void
+''');
+  }
+
+  test_genericFunction_asTypeArgument_ofAnnotation_class() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+@A<int Function(String a)>()
+class B {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @64
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: A @30
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              typeArguments: TypeArgumentList
+                leftBracket: < @31
+                arguments
+                  GenericFunctionType
+                    returnType: NamedType
+                      name: int @32
+                      element: dart:core::<fragment>::@class::int
+                      type: int
+                    functionKeyword: Function @36
+                    parameters: FormalParameterList
+                      leftParenthesis: ( @44
+                      parameter: SimpleFormalParameter
+                        type: NamedType
+                          name: String @45
+                          element: dart:core::<fragment>::@class::String
+                          type: String
+                        name: a @52
+                        declaredElement: a@52
+                          type: String
+                      rightParenthesis: ) @53
+                    declaredElement: GenericFunctionTypeElement
+                      parameters
+                        a
+                          kind: required positional
+                          type: String
+                      returnType: int
+                      type: int Function(String)
+                    type: int Function(String)
+                rightBracket: > @54
+              arguments: ArgumentList
+                leftParenthesis: ( @55
+                rightParenthesis: ) @56
+              element: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: int Function(String)}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+''');
+  }
+
+  test_genericFunction_asTypeArgument_ofAnnotation_topLevelVariable() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+@A<int Function(String a)>()
+var v = 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      topLevelVariables
+        static v @62
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: A @30
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              typeArguments: TypeArgumentList
+                leftBracket: < @31
+                arguments
+                  GenericFunctionType
+                    returnType: NamedType
+                      name: int @32
+                      element: dart:core::<fragment>::@class::int
+                      type: int
+                    functionKeyword: Function @36
+                    parameters: FormalParameterList
+                      leftParenthesis: ( @44
+                      parameter: SimpleFormalParameter
+                        type: NamedType
+                          name: String @45
+                          element: dart:core::<fragment>::@class::String
+                          type: String
+                        name: a @52
+                        declaredElement: a@52
+                          type: String
+                      rightParenthesis: ) @53
+                    declaredElement: GenericFunctionTypeElement
+                      parameters
+                        a
+                          kind: required positional
+                          type: String
+                      returnType: int
+                      type: int Function(String)
+                    type: int Function(String)
+                rightBracket: > @54
+              arguments: ArgumentList
+                leftParenthesis: ( @55
+                rightParenthesis: ) @56
+              element: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: int Function(String)}
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_genericFunction_asTypeArgument_parameters_optionalNamed() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+const v = A<String Function({int? a})>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      topLevelVariables
+        static const v @35
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: A<String Function({int? a})>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              constructorName: ConstructorName
+                type: NamedType
+                  name: A @39
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @40
+                    arguments
+                      GenericFunctionType
+                        returnType: NamedType
+                          name: String @41
+                          element: dart:core::<fragment>::@class::String
+                          type: String
+                        functionKeyword: Function @48
+                        parameters: FormalParameterList
+                          leftParenthesis: ( @56
+                          leftDelimiter: { @57
+                          parameter: DefaultFormalParameter
+                            parameter: SimpleFormalParameter
+                              type: NamedType
+                                name: int @58
+                                question: ? @61
+                                element: dart:core::<fragment>::@class::int
+                                type: int?
+                              name: a @63
+                              declaredElement: a@63
+                                type: int?
+                            declaredElement: a@63
+                              type: int?
+                          rightDelimiter: } @64
+                          rightParenthesis: ) @65
+                        declaredElement: GenericFunctionTypeElement
+                          parameters
+                            a
+                              kind: optional named
+                              type: int?
+                          returnType: String
+                          type: String Function({int? a})
+                        type: String Function({int? a})
+                    rightBracket: > @66
+                  element: <testLibraryFragment>::@class::A
+                  type: A<String Function({int? a})>
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::A::@constructor::new
+                  substitution: {T: String Function({int? a})}
+              argumentList: ArgumentList
+                leftParenthesis: ( @67
+                rightParenthesis: ) @68
+              staticType: A<String Function({int? a})>
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: A<String Function({int? a})>
+''');
+  }
+
+  test_genericFunction_asTypeArgument_parameters_optionalPositional() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+const v = A<String Function([int? a])>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      topLevelVariables
+        static const v @35
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: A<String Function([int?])>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              constructorName: ConstructorName
+                type: NamedType
+                  name: A @39
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @40
+                    arguments
+                      GenericFunctionType
+                        returnType: NamedType
+                          name: String @41
+                          element: dart:core::<fragment>::@class::String
+                          type: String
+                        functionKeyword: Function @48
+                        parameters: FormalParameterList
+                          leftParenthesis: ( @56
+                          leftDelimiter: [ @57
+                          parameter: DefaultFormalParameter
+                            parameter: SimpleFormalParameter
+                              type: NamedType
+                                name: int @58
+                                question: ? @61
+                                element: dart:core::<fragment>::@class::int
+                                type: int?
+                              name: a @63
+                              declaredElement: a@63
+                                type: int?
+                            declaredElement: a@63
+                              type: int?
+                          rightDelimiter: ] @64
+                          rightParenthesis: ) @65
+                        declaredElement: GenericFunctionTypeElement
+                          parameters
+                            a
+                              kind: optional positional
+                              type: int?
+                          returnType: String
+                          type: String Function([int?])
+                        type: String Function([int?])
+                    rightBracket: > @66
+                  element: <testLibraryFragment>::@class::A
+                  type: A<String Function([int?])>
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::A::@constructor::new
+                  substitution: {T: String Function([int?])}
+              argumentList: ArgumentList
+                leftParenthesis: ( @67
+                rightParenthesis: ) @68
+              staticType: A<String Function([int?])>
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: A<String Function([int?])>
+''');
+  }
+
+  test_genericFunction_asTypeArgument_parameters_requiredNamed() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+const v = A<String Function({required int a})>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      topLevelVariables
+        static const v @35
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: A<String Function({required int a})>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              constructorName: ConstructorName
+                type: NamedType
+                  name: A @39
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @40
+                    arguments
+                      GenericFunctionType
+                        returnType: NamedType
+                          name: String @41
+                          element: dart:core::<fragment>::@class::String
+                          type: String
+                        functionKeyword: Function @48
+                        parameters: FormalParameterList
+                          leftParenthesis: ( @56
+                          leftDelimiter: { @57
+                          parameter: DefaultFormalParameter
+                            parameter: SimpleFormalParameter
+                              requiredKeyword: required @58
+                              type: NamedType
+                                name: int @67
+                                element: dart:core::<fragment>::@class::int
+                                type: int
+                              name: a @71
+                              declaredElement: a@71
+                                type: int
+                            declaredElement: a@71
+                              type: int
+                          rightDelimiter: } @72
+                          rightParenthesis: ) @73
+                        declaredElement: GenericFunctionTypeElement
+                          parameters
+                            a
+                              kind: required named
+                              type: int
+                          returnType: String
+                          type: String Function({required int a})
+                        type: String Function({required int a})
+                    rightBracket: > @74
+                  element: <testLibraryFragment>::@class::A
+                  type: A<String Function({required int a})>
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::A::@constructor::new
+                  substitution: {T: String Function({required int a})}
+              argumentList: ArgumentList
+                leftParenthesis: ( @75
+                rightParenthesis: ) @76
+              staticType: A<String Function({required int a})>
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: A<String Function({required int a})>
+''');
+  }
+
+  test_genericFunction_asTypeArgument_parameters_requiredPositional() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+
+const v = A<String Function(int a)>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      topLevelVariables
+        static const v @35
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: A<String Function(int)>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              constructorName: ConstructorName
+                type: NamedType
+                  name: A @39
+                  typeArguments: TypeArgumentList
+                    leftBracket: < @40
+                    arguments
+                      GenericFunctionType
+                        returnType: NamedType
+                          name: String @41
+                          element: dart:core::<fragment>::@class::String
+                          type: String
+                        functionKeyword: Function @48
+                        parameters: FormalParameterList
+                          leftParenthesis: ( @56
+                          parameter: SimpleFormalParameter
+                            type: NamedType
+                              name: int @57
+                              element: dart:core::<fragment>::@class::int
+                              type: int
+                            name: a @61
+                            declaredElement: a@61
+                              type: int
+                          rightParenthesis: ) @62
+                        declaredElement: GenericFunctionTypeElement
+                          parameters
+                            a
+                              kind: required positional
+                              type: int
+                          returnType: String
+                          type: String Function(int)
+                        type: String Function(int)
+                    rightBracket: > @63
+                  element: <testLibraryFragment>::@class::A
+                  type: A<String Function(int)>
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::A::@constructor::new
+                  substitution: {T: String Function(int)}
+              argumentList: ArgumentList
+                leftParenthesis: ( @64
+                rightParenthesis: ) @65
+              staticType: A<String Function(int)>
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: A<String Function(int)>
+''');
+  }
+
+  test_genericFunction_boundOf_typeParameter_ofMixin() async {
+    var library = await buildLibrary(r'''
+mixin B<X extends void Function()> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin B @6
+          reference: <testLibraryFragment>::@mixin::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @8
+              bound: void Function()
+              defaultType: void Function()
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_genericFunction_typeArgument_ofSuperclass_ofClassAlias() async {
+    var library = await buildLibrary(r'''
+class A<T> {}
+mixin M {}
+class B = A<void Function()> with M;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class alias B @31
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A<void Function()>
+          mixins
+            M
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: void Function()}
+      mixins
+        mixin M @20
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_genericFunction_typeParameter_asTypedefArgument() async {
+    var library = await buildLibrary(r'''
+typedef F1 = Function<V1>(F2<V1>);
+typedef F2<V2> = V2 Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F1 @8
+          reference: <testLibraryFragment>::@typeAlias::F1
+          aliasedType: dynamic Function<V1>(V1 Function())
+          aliasedElement: GenericFunctionTypeElement
+            typeParameters
+              covariant V1 @22
+            parameters
+              requiredPositional @-1
+                type: V1 Function()
+                  alias: <testLibraryFragment>::@typeAlias::F2
+                    typeArguments
+                      V1
+            returnType: dynamic
+        F2 @43
+          reference: <testLibraryFragment>::@typeAlias::F2
+          typeParameters
+            covariant V2 @46
+              defaultType: dynamic
+          aliasedType: V2 Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: V2
+''');
+  }
+}
+
+@reflectiveTest
+class FunctionTypeAnnotationElementTest_fromBytes
+    extends FunctionTypeAnnotationElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class FunctionTypeAnnotationElementTest_keepLinking
+    extends FunctionTypeAnnotationElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/library_augmentation_test.dart b/pkg/analyzer/test/src/summary/elements/library_augmentation_test.dart
new file mode 100644
index 0000000..3b6817f
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/library_augmentation_test.dart
@@ -0,0 +1,1295 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(LibraryAugmentationElementTest_keepLinking);
+    defineReflectiveTests(LibraryAugmentationElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class LibraryAugmentationElementTest extends ElementsBaseTest {
+  test_augmentation_augmentationImports_augmentation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+class A {}
+''');
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+class B {}
+''');
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @31
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class A @60
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        class B @32
+          reference: <testLibrary>::@fragment::package:test/b.dart::@class::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/b.dart::@class::B::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::B
+''');
+  }
+
+  test_augmentation_class_constructor_superConstructor_generic_named() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+class B extends A<int> {
+  B() : super.named(0);
+}
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+class A<T> {
+  A.named(T a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              defaultType: dynamic
+          constructors
+            named @42
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 41
+              nameEnd: 47
+              parameters
+                requiredPositional a @50
+                  type: T
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class B @35
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          supertype: A<int>
+          constructors
+            @56
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::named
+                substitution: {T: int}
+''');
+  }
+
+  test_augmentation_class_constructor_superConstructor_notGeneric_named() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+class B extends A {
+  B() : super.named();
+}
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+class A {
+  A.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            named @39
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 38
+              nameEnd: 44
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class B @35
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          supertype: A
+          constructors
+            @51
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::named
+''');
+  }
+
+  test_augmentation_class_constructor_superConstructor_notGeneric_unnamed_explicit() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+class B extends A {
+  B() : super();
+}
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+class A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class B @35
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          supertype: A
+          constructors
+            @51
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+''');
+  }
+
+  test_augmentation_class_notSimplyBounded_circularity_via_typedef() async {
+    // C's type parameter T is not simply bounded because its bound, F, expands
+    // to `dynamic F(C)`, which refers to C.
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+class C<T extends F> {}
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+typedef F(C value);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased notSimplyBounded F @33
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function(C<dynamic>)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional value @37
+                type: C<dynamic>
+            returnType: dynamic
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        notSimplyBounded class C @35
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::C
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T @37
+              bound: dynamic
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::C::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::C
+''');
+  }
+
+  test_augmentation_class_notSimplyBounded_self() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+class C<T extends C> {}
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        notSimplyBounded class C @35
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::C
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T @37
+              bound: C<dynamic>
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::C::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::C
+''');
+  }
+
+  test_augmentation_defaultValue_class_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  static const a = 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+void f({int x = A.a}) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      functions
+        f @51
+          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          parameters
+            optionalNamed default x @58
+              reference: <testLibrary>::@fragment::package:test/b.dart::@function::f::@parameter::x
+              type: int
+              constantInitializer
+                PrefixedIdentifier
+                  prefix: SimpleIdentifier
+                    token: A @62
+                    staticElement: package:test/a.dart::<fragment>::@class::A
+                    staticType: null
+                  period: . @63
+                  identifier: SimpleIdentifier
+                    token: a @64
+                    staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
+                    staticType: int
+                  staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
+                  staticType: int
+          returnType: void
+''');
+  }
+
+  test_augmentation_defaultValue_prefix_class_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  static const a = 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart' as prefix;
+void f({int x = prefix.A.a}) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart as prefix @48
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      prefixes
+        prefix @48
+          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
+          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart as prefix @48
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      libraryImportPrefixes
+        prefix @48
+          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
+          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      functions
+        f @61
+          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          parameters
+            optionalNamed default x @68
+              reference: <testLibrary>::@fragment::package:test/b.dart::@function::f::@parameter::x
+              type: int
+              constantInitializer
+                PropertyAccess
+                  target: PrefixedIdentifier
+                    prefix: SimpleIdentifier
+                      token: prefix @72
+                      staticElement: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
+                      staticType: null
+                    period: . @78
+                    identifier: SimpleIdentifier
+                      token: A @79
+                      staticElement: package:test/a.dart::<fragment>::@class::A
+                      staticType: null
+                    staticElement: package:test/a.dart::<fragment>::@class::A
+                    staticType: null
+                  operator: . @80
+                  propertyName: SimpleIdentifier
+                    token: a @81
+                    staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
+                    staticType: int
+                  staticType: int
+          returnType: void
+''');
+  }
+
+  test_augmentation_importScope_constant() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+final a = 0;
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+const b = a;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      topLevelVariables
+        static const b @52
+          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::b
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: a @56
+              staticElement: package:test/a.dart::<fragment>::@getter::a
+              staticType: int
+      accessors
+        synthetic static get b @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::b
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: int
+''');
+  }
+
+  test_augmentation_importScope_constant_class_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  static const a = 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+const b = A.a;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      topLevelVariables
+        static const b @52
+          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::b
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PrefixedIdentifier
+              prefix: SimpleIdentifier
+                token: A @56
+                staticElement: package:test/a.dart::<fragment>::@class::A
+                staticType: null
+              period: . @57
+              identifier: SimpleIdentifier
+                token: a @58
+                staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
+                staticType: int
+              staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
+              staticType: int
+      accessors
+        synthetic static get b @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::b
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: int
+''');
+  }
+
+  test_augmentation_importScope_constant_instanceCreation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  const A {};
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+const a = A();
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      topLevelVariables
+        static const a @52
+          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::a
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          type: A
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              constructorName: ConstructorName
+                type: NamedType
+                  name: A @56
+                  element: package:test/a.dart::<fragment>::@class::A
+                  type: A
+                staticElement: package:test/a.dart::<fragment>::@class::A::@constructor::new
+              argumentList: ArgumentList
+                leftParenthesis: ( @57
+                rightParenthesis: ) @58
+              staticType: A
+      accessors
+        synthetic static get a @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::a
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: A
+''');
+  }
+
+  test_augmentation_importScope_constant_prefix_class_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  static const a = 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart' as prefix;
+const b = prefix.A.a;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart as prefix @48
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      prefixes
+        prefix @48
+          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
+          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart as prefix @48
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      libraryImportPrefixes
+        prefix @48
+          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
+          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      topLevelVariables
+        static const b @62
+          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::b
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            PropertyAccess
+              target: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: prefix @66
+                  staticElement: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
+                  staticType: null
+                period: . @72
+                identifier: SimpleIdentifier
+                  token: A @73
+                  staticElement: package:test/a.dart::<fragment>::@class::A
+                  staticType: null
+                staticElement: package:test/a.dart::<fragment>::@class::A
+                staticType: null
+              operator: . @74
+              propertyName: SimpleIdentifier
+                token: a @75
+                staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
+                staticType: int
+              staticType: int
+      accessors
+        synthetic static get b @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::b
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: int
+''');
+  }
+
+  test_augmentation_importScope_prefixed_metadata() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  const A();
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart' as prefix;
+
+@prefix.A()
+void f() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart as prefix @48
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      prefixes
+        prefix @48
+          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
+          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart as prefix @48
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      libraryImportPrefixes
+        prefix @48
+          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
+          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      functions
+        f @74
+          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          metadata
+            Annotation
+              atSign: @ @57
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: prefix @58
+                  staticElement: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
+                  staticType: null
+                period: . @64
+                identifier: SimpleIdentifier
+                  token: A @65
+                  staticElement: package:test/a.dart::<fragment>::@class::A
+                  staticType: null
+                staticElement: package:test/a.dart::<fragment>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @66
+                rightParenthesis: ) @67
+              element: package:test/a.dart::<fragment>::@class::A::@constructor::new
+          returnType: void
+''');
+  }
+
+  test_augmentation_importScope_prefixed_typeAnnotation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart' as prefix;
+prefix.A f() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart as prefix @48
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      prefixes
+        prefix @48
+          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
+          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart as prefix @48
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      libraryImportPrefixes
+        prefix @48
+          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
+          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      functions
+        f @65
+          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: A
+''');
+  }
+
+  test_augmentation_importScope_topInference() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+final a = 0;
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+final b = a;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      topLevelVariables
+        static final b @52
+          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::b
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get b @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::b
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: int
+''');
+  }
+
+  test_augmentation_importScope_types_augmentation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+A f() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+A f() {}
+''');
+
+    // The augmentation imports `a.dart`, so can resolve `A`.
+    // But the library does not import, so there `A` is unresolved.
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @27
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      functions
+        f @48
+          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: A
+''');
+  }
+
+  test_augmentation_importScope_types_library() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+A f() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+import 'a.dart';
+A f() {}
+''');
+
+    // The library imports `a.dart`, so can resolve `A`.
+    // But the augmentation does not import, so there `A` is unresolved.
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      functions
+        f @44
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      functions
+        f @31
+          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: InvalidType
+''');
+  }
+
+  test_augmentation_libraryExports_library() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+export 'dart:async';
+''');
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+export 'dart:collection';
+export 'dart:math';
+''');
+    var library = await buildLibrary(r'''
+import 'dart:io';
+import augment 'a.dart';
+import augment 'b.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:io
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      libraryExports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryExports
+        dart:collection
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:io
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryExports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryExports
+        dart:collection
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+''');
+  }
+
+  test_augmentation_libraryImports_library() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import 'dart:async';
+''');
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'dart:collection';
+import 'dart:math';
+''');
+    var library = await buildLibrary(r'''
+import 'dart:io';
+import augment 'a.dart';
+import augment 'b.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:io
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        dart:collection
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:io
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        dart:collection
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+''');
+  }
+
+  test_augmentation_topScope_augmentation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+class A {}
+A f() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+A f() {}
+''');
+
+    // The augmentation declares `A`, and can it be used in the library.
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @27
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: A
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class A @35
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
+      functions
+        f @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@function::f
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: A
+''');
+  }
+
+  test_augmentation_topScope_library() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+A f() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {}
+A f() {}
+''');
+
+    // The library declares `A`, and can it be used in the augmentation.
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      functions
+        f @38
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: A
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      functions
+        f @31
+          reference: <testLibrary>::@fragment::package:test/a.dart::@function::f
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: A
+''');
+  }
+}
+
+@reflectiveTest
+class LibraryAugmentationElementTest_fromBytes
+    extends LibraryAugmentationElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class LibraryAugmentationElementTest_keepLinking
+    extends LibraryAugmentationElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/library_export_test.dart b/pkg/analyzer/test/src/summary/elements/library_export_test.dart
new file mode 100644
index 0000000..fe9ef46
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/library_export_test.dart
@@ -0,0 +1,1622 @@
+// Copyright (c) 2024, 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/element.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(LibraryExportElementTest_keepLinking);
+    defineReflectiveTests(LibraryExportElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class LibraryExportElementTest extends ElementsBaseTest {
+  test_export_class() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    var library = await buildLibrary('export "a.dart";');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@class::C
+  exportNamespace
+    C: package:test/a.dart::<fragment>::@class::C
+''');
+  }
+
+  test_export_class_type_alias() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class C = _D with _E;
+class _D {}
+class _E {}
+''');
+    var library = await buildLibrary('export "a.dart";');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@class::C
+  exportNamespace
+    C: package:test/a.dart::<fragment>::@class::C
+''');
+  }
+
+  test_export_configurations_useDefault() async {
+    declaredVariables = {
+      'dart.library.io': 'false',
+    };
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/foo.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/foo.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+    exported[(0, 0)] package:test/foo.dart::<fragment>::@class::A
+  exportNamespace
+    A: package:test/foo.dart::<fragment>::@class::A
+''');
+    expect(library.libraryExports[0].exportedLibrary!.source.shortName,
+        'foo.dart');
+  }
+
+  test_export_configurations_useFirst() async {
+    declaredVariables = {
+      'dart.library.io': 'true',
+      'dart.library.html': 'true',
+    };
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/foo_io.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/foo_io.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+    exported[(0, 0)] package:test/foo_io.dart::<fragment>::@class::A
+  exportNamespace
+    A: package:test/foo_io.dart::<fragment>::@class::A
+''');
+    expect(library.libraryExports[0].exportedLibrary!.source.shortName,
+        'foo_io.dart');
+  }
+
+  test_export_configurations_useSecond() async {
+    declaredVariables = {
+      'dart.library.io': 'false',
+      'dart.library.html': 'true',
+    };
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/foo_html.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/foo_html.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+    exported[(0, 0)] package:test/foo_html.dart::<fragment>::@class::A
+  exportNamespace
+    A: package:test/foo_html.dart::<fragment>::@class::A
+''');
+    var export = library.libraryExports[0];
+    expect(export.exportedLibrary!.source.shortName, 'foo_html.dart');
+  }
+
+  test_export_cycle() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+export 'test.dart';
+class A {}
+''');
+
+    var library = await buildLibrary(r'''
+export 'a.dart';
+class X {}
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class X @23
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@class::A
+    declared <testLibraryFragment>::@class::X
+  exportNamespace
+    A: package:test/a.dart::<fragment>::@class::A
+    X: <testLibraryFragment>::@class::X
+''');
+  }
+
+  test_export_function() async {
+    addSource('$testPackageLibPath/a.dart', 'f() {}');
+    var library = await buildLibrary('export "a.dart";');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@function::f
+  exportNamespace
+    f: package:test/a.dart::<fragment>::@function::f
+''');
+  }
+
+  test_export_getter() async {
+    addSource('$testPackageLibPath/a.dart', 'get f() => null;');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_export_hide() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+    var library = await buildLibrary(r'''
+export 'a.dart' hide A, C;
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      combinators
+        hide: A, C
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          combinators
+            hide: A, C
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@class::B
+    exported[(0, 0)] package:test/a.dart::<fragment>::@class::D
+  exportNamespace
+    B: package:test/a.dart::<fragment>::@class::B
+    D: package:test/a.dart::<fragment>::@class::D
+''');
+  }
+
+  test_export_multiple_combinators() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+    var library = await buildLibrary(r'''
+export 'a.dart' hide A show C;
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      combinators
+        hide: A
+        show: C
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          combinators
+            hide: A
+            show: C
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@class::C
+  exportNamespace
+    C: package:test/a.dart::<fragment>::@class::C
+''');
+  }
+
+  test_export_reexport() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A {}
+''');
+
+    addSource('$testPackageLibPath/b.dart', r'''
+export 'a.dart';
+class B {}
+''');
+
+    addSource('$testPackageLibPath/c.dart', r'''
+export 'a.dart';
+class C {}
+''');
+
+    var library = await buildLibrary(r'''
+export 'b.dart';
+export 'c.dart';
+class X {}
+''');
+
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    package:test/c.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        package:test/c.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class X @40
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+  exportedReferences
+    exported[(0, 0), (0, 1)] package:test/a.dart::<fragment>::@class::A
+    exported[(0, 0)] package:test/b.dart::<fragment>::@class::B
+    exported[(0, 1)] package:test/c.dart::<fragment>::@class::C
+    declared <testLibraryFragment>::@class::X
+  exportNamespace
+    A: package:test/a.dart::<fragment>::@class::A
+    B: package:test/b.dart::<fragment>::@class::B
+    C: package:test/c.dart::<fragment>::@class::C
+    X: <testLibraryFragment>::@class::X
+''');
+  }
+
+  test_export_setter() async {
+    addSource('$testPackageLibPath/a.dart', 'void set f(value) {}');
+    var library = await buildLibrary('export "a.dart";');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@setter::f
+  exportNamespace
+    f=: package:test/a.dart::<fragment>::@setter::f
+''');
+  }
+
+  test_export_show() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A {}
+class B {}
+class C {}
+class D {}
+''');
+    var library = await buildLibrary(r'''
+export 'a.dart' show A, C;
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      combinators
+        show: A, C
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          combinators
+            show: A, C
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@class::A
+    exported[(0, 0)] package:test/a.dart::<fragment>::@class::C
+  exportNamespace
+    A: package:test/a.dart::<fragment>::@class::A
+    C: package:test/a.dart::<fragment>::@class::C
+''');
+  }
+
+  test_export_show_getter_setter() async {
+    addSource('$testPackageLibPath/a.dart', '''
+get f => null;
+void set f(value) {}
+''');
+    var library = await buildLibrary('export "a.dart" show f;');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      combinators
+        show: f
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          combinators
+            show: f
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@getter::f
+    exported[(0, 0)] package:test/a.dart::<fragment>::@setter::f
+  exportNamespace
+    f: package:test/a.dart::<fragment>::@getter::f
+    f=: package:test/a.dart::<fragment>::@setter::f
+''');
+  }
+
+  test_export_typedef() async {
+    addSource('$testPackageLibPath/a.dart', 'typedef F();');
+    var library = await buildLibrary('export "a.dart";');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@typeAlias::F
+  exportNamespace
+    F: package:test/a.dart::<fragment>::@typeAlias::F
+''');
+  }
+
+  test_export_uri() async {
+    var library = await buildLibrary('''
+export 'foo.dart';
+''');
+
+    var uri = library.libraryExports[0].uri as DirectiveUriWithLibrary;
+    expect(uri.relativeUriString, 'foo.dart');
+  }
+
+  test_export_variable() async {
+    addSource('$testPackageLibPath/a.dart', 'var x;');
+    var library = await buildLibrary('export "a.dart";');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@getter::x
+    exported[(0, 0)] package:test/a.dart::<fragment>::@setter::x
+  exportNamespace
+    x: package:test/a.dart::<fragment>::@getter::x
+    x=: package:test/a.dart::<fragment>::@setter::x
+''');
+  }
+
+  test_export_variable_const() async {
+    addSource('$testPackageLibPath/a.dart', 'const x = 0;');
+    var library = await buildLibrary('export "a.dart";');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@getter::x
+  exportNamespace
+    x: package:test/a.dart::<fragment>::@getter::x
+''');
+  }
+
+  test_export_variable_final() async {
+    addSource('$testPackageLibPath/a.dart', 'final x = 0;');
+    var library = await buildLibrary('export "a.dart";');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+    exported[(0, 0)] package:test/a.dart::<fragment>::@getter::x
+  exportNamespace
+    x: package:test/a.dart::<fragment>::@getter::x
+''');
+  }
+
+  test_exportImport_configurations_useDefault() async {
+    declaredVariables = {
+      'dart.library.io': 'false',
+    };
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    addSource('$testPackageLibPath/bar.dart', r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    var library = await buildLibrary(r'''
+import 'bar.dart';
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/bar.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/bar.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class B @25
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: package:test/foo.dart::<fragment>::@class::A::@constructor::new
+''');
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo.dart');
+  }
+
+  test_exportImport_configurations_useFirst() async {
+    declaredVariables = {
+      'dart.library.io': 'true',
+      'dart.library.html': 'false',
+    };
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    addSource('$testPackageLibPath/bar.dart', r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    var library = await buildLibrary(r'''
+import 'bar.dart';
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/bar.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/bar.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class B @25
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: package:test/foo_io.dart::<fragment>::@class::A::@constructor::new
+''');
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_io.dart');
+  }
+
+  test_exportImport_configurations_useSecond() async {
+    declaredVariables = {
+      'dart.library.io': 'false',
+      'dart.library.html': 'true',
+    };
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    addSource('$testPackageLibPath/bar.dart', r'''
+export 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+''');
+    var library = await buildLibrary(r'''
+import 'bar.dart';
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/bar.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/bar.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class B @25
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: package:test/foo_html.dart::<fragment>::@class::A::@constructor::new
+''');
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_html.dart');
+  }
+
+  test_exports() async {
+    addSource('$testPackageLibPath/a.dart', 'library a;');
+    addSource('$testPackageLibPath/b.dart', 'library b;');
+    var library = await buildLibrary('export "a.dart"; export "b.dart";');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+  exportedReferences
+  exportNamespace
+''');
+  }
+
+  test_exportScope_augmentation_class() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment class A {}
+class B {}
+''');
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {}
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          augmented
+            constructors
+              <testLibraryFragment>::@class::A::@constructor::new
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@class::A
+        class B @54
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
+  exportedReferences
+    declared <testLibrary>::@fragment::package:test/a.dart::@class::B
+    declared <testLibraryFragment>::@class::A
+  exportNamespace
+    A: <testLibraryFragment>::@class::A
+    B: <testLibrary>::@fragment::package:test/a.dart::@class::B
+''');
+  }
+
+  test_exportScope_augmentation_export() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {}
+''');
+    newFile('$testPackageLibPath/b.dart', r'''
+class B1 {}
+class B2 {}
+''');
+    newFile('$testPackageLibPath/c.dart', r'''
+class C {}
+''');
+    newFile('$testPackageLibPath/d.dart', r'''
+augment library 'test.dart';
+export 'a.dart';
+''');
+    newFile('$testPackageLibPath/e.dart', r'''
+augment library 'test.dart';
+export 'b.dart';
+export 'c.dart';
+''');
+    var library = await buildLibrary(r'''
+import augment 'd.dart';
+import augment 'e.dart';
+class X {}
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/d.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/d.dart
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/d.dart
+      definingUnit: <testLibrary>::@fragment::package:test/d.dart
+    package:test/e.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/e.dart
+      libraryExports
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/e.dart
+        package:test/c.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/e.dart
+      definingUnit: <testLibrary>::@fragment::package:test/e.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class X @56
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+    <testLibrary>::@fragment::package:test/d.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/d.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/d.dart
+    <testLibrary>::@fragment::package:test/e.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/e.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryExports
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/e.dart
+        package:test/c.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/e.dart
+  exportedReferences
+    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A
+    exported[(2, 0)] package:test/b.dart::<fragment>::@class::B1
+    exported[(2, 0)] package:test/b.dart::<fragment>::@class::B2
+    exported[(2, 1)] package:test/c.dart::<fragment>::@class::C
+    declared <testLibraryFragment>::@class::X
+  exportNamespace
+    A: package:test/a.dart::<fragment>::@class::A
+    B1: package:test/b.dart::<fragment>::@class::B1
+    B2: package:test/b.dart::<fragment>::@class::B2
+    C: package:test/c.dart::<fragment>::@class::C
+    X: <testLibraryFragment>::@class::X
+''');
+  }
+
+  test_exportScope_augmentation_export_hide() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A1 {}
+class A2 {}
+class A3 {}
+class A4 {}
+''');
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+export 'a.dart' hide A2, A4;
+''');
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+class X {}
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+          combinators
+            hide: A2, A4
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class X @31
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+          combinators
+            hide: A2, A4
+  exportedReferences
+    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A1
+    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A3
+    declared <testLibraryFragment>::@class::X
+  exportNamespace
+    A1: package:test/a.dart::<fragment>::@class::A1
+    A3: package:test/a.dart::<fragment>::@class::A3
+    X: <testLibraryFragment>::@class::X
+''');
+  }
+
+  test_exportScope_augmentation_export_show() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A1 {}
+class A2 {}
+class A3 {}
+''');
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+export 'a.dart' show A1, A3;
+''');
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+class X {}
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+          combinators
+            show: A1, A3
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class X @31
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+          combinators
+            show: A1, A3
+  exportedReferences
+    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A1
+    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A3
+    declared <testLibraryFragment>::@class::X
+  exportNamespace
+    A1: package:test/a.dart::<fragment>::@class::A1
+    A3: package:test/a.dart::<fragment>::@class::A3
+    X: <testLibraryFragment>::@class::X
+''');
+  }
+
+  test_exportScope_augmentation_mixin() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {}
+mixin B {}
+''');
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {}
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          augmented
+            superclassConstraints
+              Object
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+        mixin B @54
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::B
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          superclassConstraints
+            Object
+  exportedReferences
+    declared <testLibrary>::@fragment::package:test/a.dart::@mixin::B
+    declared <testLibraryFragment>::@mixin::A
+  exportNamespace
+    A: <testLibraryFragment>::@mixin::A
+    B: <testLibrary>::@fragment::package:test/a.dart::@mixin::B
+''');
+  }
+
+  test_exportScope_augmentation_nested_class() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+class A {}
+''');
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+class B {}
+''');
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class C {}
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @31
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class A @60
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        class B @32
+          reference: <testLibrary>::@fragment::package:test/b.dart::@class::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/b.dart::@class::B::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::B
+  exportedReferences
+    declared <testLibrary>::@fragment::package:test/a.dart::@class::A
+    declared <testLibrary>::@fragment::package:test/b.dart::@class::B
+    declared <testLibraryFragment>::@class::C
+  exportNamespace
+    A: <testLibrary>::@fragment::package:test/a.dart::@class::A
+    B: <testLibrary>::@fragment::package:test/b.dart::@class::B
+    C: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_exportScope_augmentation_nested_export() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {}
+''');
+    newFile('$testPackageLibPath/b.dart', r'''
+class B {}
+''');
+    newFile('$testPackageLibPath/c.dart', r'''
+augment library 'test.dart';
+import augment 'd.dart';
+export 'a.dart';
+''');
+    newFile('$testPackageLibPath/d.dart', r'''
+augment library 'c.dart';
+export 'b.dart';
+''');
+    var library = await buildLibrary(r'''
+import augment 'c.dart';
+class X {}
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/c.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/c.dart
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/c.dart
+      definingUnit: <testLibrary>::@fragment::package:test/c.dart
+      augmentationImports
+        package:test/d.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/c.dart
+          reference: <testLibrary>::@augmentation::package:test/d.dart
+          libraryExports
+            package:test/b.dart
+              enclosingElement: <testLibrary>
+              enclosingElement3: <testLibrary>::@fragment::package:test/d.dart
+          definingUnit: <testLibrary>::@fragment::package:test/d.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class X @31
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+    <testLibrary>::@fragment::package:test/c.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/c.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/c.dart
+    <testLibrary>::@fragment::package:test/d.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/d.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/c.dart
+      libraryExports
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/d.dart
+  exportedReferences
+    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A
+    exported[(2, 0)] package:test/b.dart::<fragment>::@class::B
+    declared <testLibraryFragment>::@class::X
+  exportNamespace
+    A: package:test/a.dart::<fragment>::@class::A
+    B: package:test/b.dart::<fragment>::@class::B
+    X: <testLibraryFragment>::@class::X
+''');
+  }
+
+  test_exportScope_augmentation_variable() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+int a = 0;
+''');
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static a @33
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::a
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get a @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::a
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+        synthetic static set a= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::a
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _a @-1
+              type: int
+          returnType: void
+  exportedReferences
+    declared <testLibrary>::@fragment::package:test/a.dart::@getter::a
+    declared <testLibrary>::@fragment::package:test/a.dart::@setter::a
+  exportNamespace
+    a: <testLibrary>::@fragment::package:test/a.dart::@getter::a
+    a=: <testLibrary>::@fragment::package:test/a.dart::@setter::a
+''');
+  }
+
+  test_exportScope_augmentation_variable_const() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+const a = 0;
+''');
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const a @35
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::a
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @39
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::a
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+  exportedReferences
+    declared <testLibrary>::@fragment::package:test/a.dart::@getter::a
+  exportNamespace
+    a: <testLibrary>::@fragment::package:test/a.dart::@getter::a
+''');
+  }
+
+  test_library_exports_noRelativeUriStr() async {
+    var library = await buildLibrary(r'''
+export '${'foo'}.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    noRelativeUriString
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        noRelativeUriString
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_exports_withRelativeUri_emptyUriSelf() async {
+    var library = await buildLibrary(r'''
+export '';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/test.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/test.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_exports_withRelativeUri_noSource() async {
+    var library = await buildLibrary(r'''
+export 'foo:bar';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    relativeUri 'foo:bar'
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        relativeUri 'foo:bar'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_exports_withRelativeUri_notExists() async {
+    var library = await buildLibrary(r'''
+export 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_exports_withRelativeUri_notLibrary_augmentation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+''');
+    var library = await buildLibrary(r'''
+export 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    source 'package:test/a.dart'
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        source 'package:test/a.dart'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_exports_withRelativeUri_notLibrary_part() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+part of other.lib;
+''');
+    var library = await buildLibrary(r'''
+export 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    source 'package:test/a.dart'
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        source 'package:test/a.dart'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_exports_withRelativeUriString() async {
+    var library = await buildLibrary(r'''
+export ':';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    relativeUriString ':'
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        relativeUriString ':'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_libraryExports_part() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+part of 'test.dart';
+export 'dart:math';
+''');
+
+    var library = await buildLibrary(r'''
+export 'dart:io';
+part 'a.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    dart:io
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        dart:io
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      libraryExports
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+''');
+  }
+
+  test_unresolved_export() async {
+    var library = await buildLibrary("export 'foo.dart';");
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/foo.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/foo.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+}
+
+@reflectiveTest
+class LibraryExportElementTest_fromBytes extends LibraryExportElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class LibraryExportElementTest_keepLinking extends LibraryExportElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/library_import_test.dart b/pkg/analyzer/test/src/summary/elements/library_import_test.dart
new file mode 100644
index 0000000..c97fdb9
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/library_import_test.dart
@@ -0,0 +1,1318 @@
+// Copyright (c) 2024, 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/element.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(LibraryImportElementTest_keepLinking);
+    defineReflectiveTests(LibraryImportElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class LibraryImportElementTest extends ElementsBaseTest {
+  test_import_configurations_useDefault() async {
+    declaredVariables = {
+      'dart.library.io': 'false',
+    };
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+import 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class B @104
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: package:test/foo.dart::<fragment>::@class::A::@constructor::new
+''');
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo.dart');
+  }
+
+  test_import_configurations_useFirst() async {
+    declaredVariables = {
+      'dart.library.io': 'true',
+      'dart.library.html': 'true',
+    };
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+import 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo_io.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo_io.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class B @104
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: package:test/foo_io.dart::<fragment>::@class::A::@constructor::new
+''');
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_io.dart');
+  }
+
+  test_import_configurations_useFirst_eqTrue() async {
+    declaredVariables = {
+      'dart.library.io': 'true',
+      'dart.library.html': 'true',
+    };
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+import 'foo.dart'
+  if (dart.library.io == 'true') 'foo_io.dart'
+  if (dart.library.html == 'true') 'foo_html.dart';
+
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo_io.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo_io.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class B @124
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: package:test/foo_io.dart::<fragment>::@class::A::@constructor::new
+''');
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_io.dart');
+  }
+
+  test_import_configurations_useSecond() async {
+    declaredVariables = {
+      'dart.library.io': 'false',
+      'dart.library.html': 'true',
+    };
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+import 'foo.dart'
+  if (dart.library.io) 'foo_io.dart'
+  if (dart.library.html) 'foo_html.dart';
+
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo_html.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo_html.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class B @104
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: package:test/foo_html.dart::<fragment>::@class::A::@constructor::new
+''');
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_html.dart');
+  }
+
+  test_import_configurations_useSecond_eqTrue() async {
+    declaredVariables = {
+      'dart.library.io': 'false',
+      'dart.library.html': 'true',
+    };
+    addSource('$testPackageLibPath/foo.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
+    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
+    var library = await buildLibrary(r'''
+import 'foo.dart'
+  if (dart.library.io == 'true') 'foo_io.dart'
+  if (dart.library.html == 'true') 'foo_html.dart';
+
+class B extends A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo_html.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo_html.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class B @124
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: package:test/foo_html.dart::<fragment>::@class::A::@constructor::new
+''');
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
+    expect(typeA.element.source.shortName, 'foo_html.dart');
+  }
+
+  test_import_dartCore_explicit() async {
+    var library = await buildLibrary('''
+import 'dart:core';
+import 'dart:math';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:core
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    dart:math
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:core
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_import_dartCore_implicit() async {
+    var library = await buildLibrary('''
+import 'dart:math';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:math
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_import_deferred() async {
+    addSource('$testPackageLibPath/a.dart', 'f() {}');
+    var library = await buildLibrary('''
+import 'a.dart' deferred as p;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart deferred as p @28
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @28
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart deferred as p @28
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @28
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_import_export() async {
+    var library = await buildLibrary('''
+import 'dart:async' as i1;
+export 'dart:math';
+import 'dart:async' as i2;
+export 'dart:math';
+import 'dart:async' as i3;
+export 'dart:math';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async as i1 @23
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    dart:async as i2 @70
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    dart:async as i3 @117
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    i1 @23
+      reference: <testLibraryFragment>::@prefix::i1
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    i2 @70
+      reference: <testLibraryFragment>::@prefix::i2
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    i3 @117
+      reference: <testLibraryFragment>::@prefix::i3
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  libraryExports
+    dart:math
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    dart:math
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    dart:math
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async as i1 @23
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        dart:async as i2 @70
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        dart:async as i3 @117
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        i1 @23
+          reference: <testLibraryFragment>::@prefix::i1
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        i2 @70
+          reference: <testLibraryFragment>::@prefix::i2
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        i3 @117
+          reference: <testLibraryFragment>::@prefix::i3
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryExports
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_import_hide() async {
+    var library = await buildLibrary('''
+import 'dart:async' hide Stream, Completer; Future f;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      combinators
+        hide: Stream, Completer
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          combinators
+            hide: Stream, Completer
+      topLevelVariables
+        static f @51
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: Future<dynamic>
+      accessors
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: Future<dynamic>
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: Future<dynamic>
+          returnType: void
+''');
+  }
+
+  test_import_hide_offsetEnd() async {
+    var library = await buildLibrary('''
+import "dart:math" hide e, pi;
+''');
+    var import = library.libraryImports[0];
+    var combinator = import.combinators[0] as HideElementCombinator;
+    expect(combinator.offset, 19);
+    expect(combinator.end, 29);
+  }
+
+  test_import_invalidUri_metadata() async {
+    var library = await buildLibrary('''
+@foo
+import 'ht:';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  metadata
+    Annotation
+      atSign: @ @0
+      name: SimpleIdentifier
+        token: foo @1
+        staticElement: <null>
+        staticType: null
+      element: <null>
+  libraryImports
+    relativeUri 'ht:'
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      metadata
+        Annotation
+          atSign: @ @0
+          name: SimpleIdentifier
+            token: foo @1
+            staticElement: <null>
+            staticType: null
+          element: <null>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        relativeUri 'ht:'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: SimpleIdentifier
+                token: foo @1
+                staticElement: <null>
+                staticType: null
+              element: <null>
+''');
+  }
+
+  test_import_multiple_combinators() async {
+    var library = await buildLibrary('''
+import "dart:async" hide Stream show Future;
+Future f;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      combinators
+        hide: Stream
+        show: Future
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          combinators
+            hide: Stream
+            show: Future
+      topLevelVariables
+        static f @52
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: Future<dynamic>
+      accessors
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: Future<dynamic>
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: Future<dynamic>
+          returnType: void
+''');
+  }
+
+  test_import_prefixed() async {
+    addSource('$testPackageLibPath/a.dart', 'library a; class C {}');
+    var library = await buildLibrary('import "a.dart" as a; a.C c;');
+
+    var prefixElement = library.libraryImports[0].prefix!.element;
+    expect(prefixElement.nameOffset, 19);
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as a @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    a @19
+      reference: <testLibraryFragment>::@prefix::a
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as a @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        a @19
+          reference: <testLibraryFragment>::@prefix::a
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @26
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+''');
+  }
+
+  test_import_self() async {
+    var library = await buildLibrary('''
+import 'test.dart' as p;
+class C {}
+class D extends p.C {} // Prevent "unused import" warning
+''');
+    expect(library.libraryImports, hasLength(2));
+    expect(
+        library.libraryImports[0].importedLibrary!.location, library.location);
+    expect(library.libraryImports[1].importedLibrary!.isDartCore, true);
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/test.dart as p @22
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    p @22
+      reference: <testLibraryFragment>::@prefix::p
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/test.dart as p @22
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        p @22
+          reference: <testLibraryFragment>::@prefix::p
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @31
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @42
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          supertype: C
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+              superConstructor: <testLibraryFragment>::@class::C::@constructor::new
+''');
+  }
+
+  test_import_show() async {
+    var library = await buildLibrary('''
+import "dart:async" show Future, Stream;
+Future f;
+Stream s;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      combinators
+        show: Future, Stream
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          combinators
+            show: Future, Stream
+      topLevelVariables
+        static f @48
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: Future<dynamic>
+        static s @58
+          reference: <testLibraryFragment>::@topLevelVariable::s
+          enclosingElement: <testLibraryFragment>
+          type: Stream<dynamic>
+      accessors
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: Future<dynamic>
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: Future<dynamic>
+          returnType: void
+        synthetic static get s @-1
+          reference: <testLibraryFragment>::@getter::s
+          enclosingElement: <testLibraryFragment>
+          returnType: Stream<dynamic>
+        synthetic static set s= @-1
+          reference: <testLibraryFragment>::@setter::s
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _s @-1
+              type: Stream<dynamic>
+          returnType: void
+''');
+  }
+
+  test_import_show_offsetEnd() async {
+    var library = await buildLibrary('''
+import "dart:math" show e, pi;
+''');
+    var import = library.libraryImports[0];
+    var combinator = import.combinators[0] as ShowElementCombinator;
+    expect(combinator.offset, 19);
+    expect(combinator.end, 29);
+  }
+
+  test_import_uri() async {
+    var library = await buildLibrary('''
+import 'foo.dart';
+''');
+
+    var uri = library.libraryImports[0].uri as DirectiveUriWithLibrary;
+    expect(uri.relativeUriString, 'foo.dart');
+  }
+
+  test_imports() async {
+    addSource('$testPackageLibPath/a.dart', 'library a; class C {}');
+    addSource('$testPackageLibPath/b.dart', 'library b; class D {}');
+    var library =
+        await buildLibrary('import "a.dart"; import "b.dart"; C c; D d;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @36
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+        static d @41
+          reference: <testLibraryFragment>::@topLevelVariable::d
+          enclosingElement: <testLibraryFragment>
+          type: D
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get d @-1
+          reference: <testLibraryFragment>::@getter::d
+          enclosingElement: <testLibraryFragment>
+          returnType: D
+        synthetic static set d= @-1
+          reference: <testLibraryFragment>::@setter::d
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _d @-1
+              type: D
+          returnType: void
+''');
+  }
+
+  test_library_imports_noRelativeUriStr() async {
+    var library = await buildLibrary(r'''
+import '${'foo'}.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    noRelativeUriString
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        noRelativeUriString
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_imports_prefix_importedLibraries() async {
+    var library = await buildLibrary(r'''
+import 'dart:async' as p1;
+import 'dart:collection' as p2;
+import 'dart:math' as p1;
+''');
+    var p1 = library.prefixes.singleWhere((prefix) => prefix.name == 'p1');
+    var import_async = library.libraryImports[0];
+    var import_math = library.libraryImports[2];
+    expect(p1.imports, unorderedEquals([import_async, import_math]));
+  }
+
+  test_library_imports_syntheticDartCore() async {
+    var library = await buildLibrary('');
+    configuration.withSyntheticDartCoreImport = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:core synthetic
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:core synthetic
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_imports_withRelativeUri_emptyUriSelf() async {
+    var library = await buildLibrary(r'''
+import '';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/test.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/test.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_imports_withRelativeUri_noSource() async {
+    var library = await buildLibrary(r'''
+import 'foo:bar';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    relativeUri 'foo:bar'
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        relativeUri 'foo:bar'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_imports_withRelativeUri_notExists() async {
+    var library = await buildLibrary(r'''
+import 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_imports_withRelativeUri_notLibrary_augmentation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    source 'package:test/a.dart'
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        source 'package:test/a.dart'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_imports_withRelativeUri_notLibrary_part() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+part of other.lib;
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    source 'package:test/a.dart'
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        source 'package:test/a.dart'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_imports_withRelativeUriString() async {
+    var library = await buildLibrary(r'''
+import ':';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    relativeUriString ':'
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        relativeUriString ':'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_prefixes() async {
+    var library = await buildLibrary(r'''
+import 'dart:async' as p1;
+import 'dart:collection' as p2;
+import 'dart:math' as p1;
+''');
+    var prefixNames = library.prefixes.map((e) => e.name).toList();
+    expect(prefixNames, unorderedEquals(['p1', 'p2']));
+  }
+
+  test_libraryImports_part() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+part of 'test.dart';
+import 'dart:math';
+''');
+
+    var library = await buildLibrary(r'''
+import 'dart:io';
+part 'a.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:io
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:io
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+''');
+  }
+
+  test_libraryImports_part_metadata() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+part of 'test.dart';
+@deprecated
+import 'dart:math';
+''');
+
+    var library = await buildLibrary(r'''
+part 'a.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+          metadata
+            Annotation
+              atSign: @ @21
+              name: SimpleIdentifier
+                token: deprecated @22
+                staticElement: dart:core::<fragment>::@getter::deprecated
+                staticType: null
+              element: dart:core::<fragment>::@getter::deprecated
+''');
+  }
+
+  test_metadata_importDirective() async {
+    var library = await buildLibrary('''
+@a
+import "dart:math";
+const a = 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  metadata
+    Annotation
+      atSign: @ @0
+      name: SimpleIdentifier
+        token: a @1
+        staticElement: <testLibraryFragment>::@getter::a
+        staticType: null
+      element: <testLibraryFragment>::@getter::a
+  libraryImports
+    dart:math
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      metadata
+        Annotation
+          atSign: @ @0
+          name: SimpleIdentifier
+            token: a @1
+            staticElement: <testLibraryFragment>::@getter::a
+            staticType: null
+          element: <testLibraryFragment>::@getter::a
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: SimpleIdentifier
+                token: a @1
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+      topLevelVariables
+        static const a @29
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @33
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_importDirective_hasShow() async {
+    var library = await buildLibrary(r'''
+@a
+import "dart:math" show Random;
+
+const a = 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  metadata
+    Annotation
+      atSign: @ @0
+      name: SimpleIdentifier
+        token: a @1
+        staticElement: <testLibraryFragment>::@getter::a
+        staticType: null
+      element: <testLibraryFragment>::@getter::a
+  libraryImports
+    dart:math
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      metadata
+        Annotation
+          atSign: @ @0
+          name: SimpleIdentifier
+            token: a @1
+            staticElement: <testLibraryFragment>::@getter::a
+            staticType: null
+          element: <testLibraryFragment>::@getter::a
+      combinators
+        show: Random
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: SimpleIdentifier
+                token: a @1
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+          combinators
+            show: Random
+      topLevelVariables
+        static const a @42
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @46
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_nameConflict_importWithRelativeUri_exportWithAbsolute() async {
+    if (resourceProvider.pathContext.separator != '/') {
+      return;
+    }
+
+    addSource('$testPackageLibPath/a.dart', 'class A {}');
+    addSource('$testPackageLibPath/b.dart', 'export "/a.dart";');
+    var library = await buildLibrary('''
+import 'a.dart';
+import 'b.dart';
+A v = null;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static v @36
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: A
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: A
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: A
+          returnType: void
+''');
+  }
+
+  test_unresolved_import() async {
+    var library = await buildLibrary("import 'foo.dart';");
+    var importedLibrary = library.libraryImports[0].importedLibrary!;
+    expect(importedLibrary.loadLibraryFunction, isNotNull);
+    expect(importedLibrary.publicNamespace, isNotNull);
+    expect(importedLibrary.exportNamespace, isNotNull);
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+}
+
+@reflectiveTest
+class LibraryImportElementTest_fromBytes extends LibraryImportElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class LibraryImportElementTest_keepLinking extends LibraryImportElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/library_test.dart b/pkg/analyzer/test/src/summary/elements/library_test.dart
new file mode 100644
index 0000000..6381e4f
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/library_test.dart
@@ -0,0 +1,109 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(LibraryElementTest_keepLinking);
+    defineReflectiveTests(LibraryElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class LibraryElementTest extends ElementsBaseTest {
+  test_library() async {
+    var library = await buildLibrary('');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+
+  test_library_documented_lines() async {
+    var library = await buildLibrary('''
+/// aaa
+/// bbb
+library test;
+''');
+    checkElementText(library, r'''
+library
+  name: test
+  nameOffset: 24
+  reference: <testLibrary>
+  documentationComment: /// aaa\n/// bbb
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+
+  test_library_documented_stars() async {
+    var library = await buildLibrary('''
+/**
+ * aaa
+ * bbb
+ */
+library test;''');
+    checkElementText(library, r'''
+library
+  name: test
+  nameOffset: 30
+  reference: <testLibrary>
+  documentationComment: /**\n * aaa\n * bbb\n */
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+
+  test_library_name_with_spaces() async {
+    var library = await buildLibrary('library foo . bar ;');
+    checkElementText(library, r'''
+library
+  name: foo.bar
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+
+  test_library_named() async {
+    var library = await buildLibrary('library foo.bar;');
+    checkElementText(library, r'''
+library
+  name: foo.bar
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+}
+
+@reflectiveTest
+class LibraryElementTest_fromBytes extends LibraryElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class LibraryElementTest_keepLinking extends LibraryElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/local_declarations_test.dart b/pkg/analyzer/test/src/summary/elements/local_declarations_test.dart
new file mode 100644
index 0000000..1bdad95
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/local_declarations_test.dart
@@ -0,0 +1,229 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(LocalDeclarationElementTest_keepLinking);
+    defineReflectiveTests(LocalDeclarationElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class LocalDeclarationElementTest extends ElementsBaseTest {
+  test_localFunctions() async {
+    var library = await buildLibrary(r'''
+f() {
+  f1() {}
+  {
+    f2() {}
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_localFunctions_inConstructor() async {
+    var library = await buildLibrary(r'''
+class C {
+  C() {
+    f() {}
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_localFunctions_inMethod() async {
+    var library = await buildLibrary(r'''
+class C {
+  m() {
+    f() {}
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            m @12
+              reference: <testLibraryFragment>::@class::C::@method::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_localFunctions_inTopLevelGetter() async {
+    var library = await buildLibrary(r'''
+get g {
+  f() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static g @-1
+          reference: <testLibraryFragment>::@topLevelVariable::g
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        static get g @4
+          reference: <testLibraryFragment>::@getter::g
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_localLabels_inConstructor() async {
+    var library = await buildLibrary(r'''
+class C {
+  C() {
+    aaa: while (true) {}
+    bbb: switch (42) {
+      ccc: case 0:
+        break;
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_localLabels_inMethod() async {
+    var library = await buildLibrary(r'''
+class C {
+  m() {
+    aaa: while (true) {}
+    bbb: switch (42) {
+      ccc: case 0:
+        break;
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            m @12
+              reference: <testLibraryFragment>::@class::C::@method::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_localLabels_inTopLevelFunction() async {
+    var library = await buildLibrary(r'''
+main() {
+  aaa: while (true) {}
+  bbb: switch (42) {
+    ccc: case 0:
+      break;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        main @0
+          reference: <testLibraryFragment>::@function::main
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+}
+
+@reflectiveTest
+class LocalDeclarationElementTest_fromBytes
+    extends LocalDeclarationElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class LocalDeclarationElementTest_keepLinking
+    extends LocalDeclarationElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/metadata_test.dart b/pkg/analyzer/test/src/summary/elements/metadata_test.dart
new file mode 100644
index 0000000..2b798c2
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/metadata_test.dart
@@ -0,0 +1,6301 @@
+// Copyright (c) 2024, 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/element.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(MetadataElementTest_keepLinking);
+    defineReflectiveTests(MetadataElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class MetadataElementTest extends ElementsBaseTest {
+  test_annotationArgument_recordLiteral() async {
+    var library = await buildLibrary('''
+@A((2, a: 3))
+class C {}
+class A {
+  const A(o);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @20
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: SimpleIdentifier
+                token: A @1
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @2
+                arguments
+                  RecordLiteral
+                    leftParenthesis: ( @3
+                    fields
+                      IntegerLiteral
+                        literal: 2 @4
+                        staticType: int
+                      NamedExpression
+                        name: Label
+                          label: SimpleIdentifier
+                            token: a @7
+                            staticElement: <null>
+                            staticType: null
+                          colon: : @8
+                        expression: IntegerLiteral
+                          literal: 3 @10
+                          staticType: int
+                    rightParenthesis: ) @11
+                    staticType: (int, {int a})
+                rightParenthesis: ) @12
+              element: <testLibraryFragment>::@class::A::@constructor::new
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @43
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional o @45
+                  type: dynamic
+''');
+  }
+
+  test_annotationArgument_recordLiteral_withConst() async {
+    var library = await buildLibrary('''
+@A(const ('',))
+class C {}
+class A {
+  const A(o);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: SimpleIdentifier
+                token: A @1
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @2
+                arguments
+                  RecordLiteral
+                    constKeyword: const @3
+                    leftParenthesis: ( @9
+                    fields
+                      SimpleStringLiteral
+                        literal: '' @10
+                    rightParenthesis: ) @13
+                    staticType: (String,)
+                rightParenthesis: ) @14
+              element: <testLibraryFragment>::@class::A::@constructor::new
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class A @33
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @45
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional o @47
+                  type: dynamic
+''');
+  }
+
+  test_invalid_annotation_prefixed_constructor() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A {
+  const A.named();
+}
+''');
+    var library = await buildLibrary('''
+import "a.dart" as a;
+@a.A.named
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as a @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    a @19
+      reference: <testLibraryFragment>::@prefix::a
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as a @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        a @19
+          reference: <testLibraryFragment>::@prefix::a
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @39
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @22
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: a @23
+                  staticElement: <testLibraryFragment>::@prefix::a
+                  staticType: null
+                period: . @24
+                identifier: SimpleIdentifier
+                  token: A @25
+                  staticElement: package:test/a.dart::<fragment>::@class::A
+                  staticType: null
+                staticElement: package:test/a.dart::<fragment>::@class::A
+                staticType: null
+              period: . @26
+              constructorName: SimpleIdentifier
+                token: named @27
+                staticElement: package:test/a.dart::<fragment>::@class::A::@constructor::named
+                staticType: null
+              element: package:test/a.dart::<fragment>::@class::A::@constructor::named
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_invalid_annotation_unprefixed_constructor() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class A {
+  const A.named();
+}
+''');
+    var library = await buildLibrary('''
+import "a.dart";
+@A.named
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @32
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @17
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: A @18
+                  staticElement: package:test/a.dart::<fragment>::@class::A
+                  staticType: null
+                period: . @19
+                identifier: SimpleIdentifier
+                  token: named @20
+                  staticElement: package:test/a.dart::<fragment>::@class::A::@constructor::named
+                  staticType: null
+                staticElement: package:test/a.dart::<fragment>::@class::A::@constructor::named
+                staticType: null
+              element: package:test/a.dart::<fragment>::@class::A::@constructor::named
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_augmentation_class() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+@deprecated
+class A {}
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class A @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: deprecated @30
+                staticElement: dart:core::<fragment>::@getter::deprecated
+                staticType: null
+              element: dart:core::<fragment>::@getter::deprecated
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
+''');
+  }
+
+  test_metadata_augmentation_exportLibrary() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+@deprecated
+export 'dart:math';
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      libraryExports
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: deprecated @30
+                staticElement: dart:core::<fragment>::@getter::deprecated
+                staticType: null
+              element: dart:core::<fragment>::@getter::deprecated
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryExports
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: deprecated @30
+                staticElement: dart:core::<fragment>::@getter::deprecated
+                staticType: null
+              element: dart:core::<fragment>::@getter::deprecated
+''');
+  }
+
+  test_metadata_augmentation_importAugmentation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'b.dart';
+''');
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+@deprecated
+import augment 'a.dart';
+''');
+    var library = await buildLibrary('''
+import augment 'b.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+      augmentationImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: deprecated @30
+                staticElement: dart:core::<fragment>::@getter::deprecated
+                staticType: null
+              element: dart:core::<fragment>::@getter::deprecated
+          reference: <testLibrary>::@augmentation::package:test/a.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+''');
+  }
+
+  test_metadata_augmentation_importLibrary() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+@deprecated
+import 'dart:math';
+''');
+    var library = await buildLibrary('''
+import augment 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      libraryImports
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: deprecated @30
+                staticElement: dart:core::<fragment>::@getter::deprecated
+                staticType: null
+              element: dart:core::<fragment>::@getter::deprecated
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        dart:math
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: deprecated @30
+                staticElement: dart:core::<fragment>::@getter::deprecated
+                staticType: null
+              element: dart:core::<fragment>::@getter::deprecated
+''');
+  }
+
+  test_metadata_class_field_first() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+class C {
+  @a
+  int x = 0;
+}
+''');
+    // Check metadata without asking any other properties.
+    var x = _elementOfDefiningUnit(library, ['@class', 'C', '@field', 'x'])
+        as FieldElement;
+    expect(x.metadata, hasLength(1));
+    // Check details.
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @19
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @34
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @25
+                  name: SimpleIdentifier
+                    token: a @26
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+              type: int
+              shouldUseTypeForInitializerInference: true
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: int
+              returnType: void
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @10
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_class_scope() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+class C<@foo T> {
+  static const foo = 1;
+  @foo
+  void bar() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @27
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            covariant T @34
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @29
+                  name: SimpleIdentifier
+                    token: foo @30
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          fields
+            static const foo @54
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 1 @60
+                  staticType: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@class::C::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+          methods
+            bar @77
+              reference: <testLibraryFragment>::@class::C::@method::bar
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @65
+                  name: SimpleIdentifier
+                    token: foo @66
+                    staticElement: <testLibraryFragment>::@class::C::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@class::C::@getter::foo
+              returnType: void
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_classDeclaration() async {
+    var library = await buildLibrary(r'''
+const a = null;
+const b = null;
+@a
+@b
+class C {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @44
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @32
+              name: SimpleIdentifier
+                token: a @33
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+            Annotation
+              atSign: @ @35
+              name: SimpleIdentifier
+                token: b @36
+                staticElement: <testLibraryFragment>::@getter::b
+                staticType: null
+              element: <testLibraryFragment>::@getter::b
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+        static const b @22
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @26
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_classTypeAlias() async {
+    var library = await buildLibrary(
+        'const a = null; @a class C = D with E; class D {} class E {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias C @25
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: a @17
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+          supertype: D
+          mixins
+            E
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @45
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @56
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_constructor_call_named() async {
+    var library = await buildLibrary('''
+class A {
+  const A.named(int _);
+}
+@A.named(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const named @20
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 19
+              nameEnd: 25
+              parameters
+                requiredPositional _ @30
+                  type: int
+        class C @54
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @36
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: A @37
+                  staticElement: <testLibraryFragment>::@class::A
+                  staticType: null
+                period: . @38
+                identifier: SimpleIdentifier
+                  token: named @39
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::named
+                  staticType: null
+                staticElement: <testLibraryFragment>::@class::A::@constructor::named
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @44
+                arguments
+                  IntegerLiteral
+                    literal: 0 @45
+                    staticType: int
+                rightParenthesis: ) @46
+              element: <testLibraryFragment>::@class::A::@constructor::named
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_named_generic_inference() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A.named(T _);
+}
+
+@A.named(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const named @23
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 22
+              nameEnd: 28
+              parameters
+                requiredPositional _ @31
+                  type: T
+        class C @56
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @38
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: A @39
+                  staticElement: <testLibraryFragment>::@class::A
+                  staticType: null
+                period: . @40
+                identifier: SimpleIdentifier
+                  token: named @41
+                  staticElement: ConstructorMember
+                    base: <testLibraryFragment>::@class::A::@constructor::named
+                    substitution: {T: int}
+                  staticType: null
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::A::@constructor::named
+                  substitution: {T: int}
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @46
+                arguments
+                  IntegerLiteral
+                    literal: 0 @47
+                    staticType: int
+                rightParenthesis: ) @48
+              element: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::named
+                substitution: {T: int}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_named_generic_typeArguments() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A.named();
+}
+
+@A<int>.named()
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const named @23
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 22
+              nameEnd: 28
+        class C @57
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @35
+              name: SimpleIdentifier
+                token: A @36
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              typeArguments: TypeArgumentList
+                leftBracket: < @37
+                arguments
+                  NamedType
+                    name: int @38
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @41
+              period: . @42
+              constructorName: SimpleIdentifier
+                token: named @43
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::A::@constructor::named
+                  substitution: {T: int}
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @48
+                rightParenthesis: ) @49
+              element: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::named
+                substitution: {T: int}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_named_generic_typeArguments_disabledGenericMetadata() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A.named();
+}
+
+@A<int>.named()
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const named @23
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 22
+              nameEnd: 28
+        class C @57
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @35
+              name: SimpleIdentifier
+                token: A @36
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              typeArguments: TypeArgumentList
+                leftBracket: < @37
+                arguments
+                  NamedType
+                    name: int @38
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @41
+              period: . @42
+              constructorName: SimpleIdentifier
+                token: named @43
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::A::@constructor::named
+                  substitution: {T: int}
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @48
+                rightParenthesis: ) @49
+              element: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::named
+                substitution: {T: int}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_named_prefixed() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A {
+  const A.named(int _);
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+@foo.A.named(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @48
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @26
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @27
+                  staticElement: <testLibraryFragment>::@prefix::foo
+                  staticType: null
+                period: . @30
+                identifier: SimpleIdentifier
+                  token: A @31
+                  staticElement: package:test/foo.dart::<fragment>::@class::A
+                  staticType: null
+                staticElement: package:test/foo.dart::<fragment>::@class::A
+                staticType: null
+              period: . @32
+              constructorName: SimpleIdentifier
+                token: named @33
+                staticElement: package:test/foo.dart::<fragment>::@class::A::@constructor::named
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @38
+                arguments
+                  IntegerLiteral
+                    literal: 0 @39
+                    staticType: int
+                rightParenthesis: ) @40
+              element: package:test/foo.dart::<fragment>::@class::A::@constructor::named
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_named_prefixed_generic_inference() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A<T> {
+  const A.named(T _);
+}
+''');
+    var library = await buildLibrary('''
+import "foo.dart" as foo;
+@foo.A.named(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @48
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @26
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @27
+                  staticElement: <testLibraryFragment>::@prefix::foo
+                  staticType: null
+                period: . @30
+                identifier: SimpleIdentifier
+                  token: A @31
+                  staticElement: package:test/foo.dart::<fragment>::@class::A
+                  staticType: null
+                staticElement: package:test/foo.dart::<fragment>::@class::A
+                staticType: null
+              period: . @32
+              constructorName: SimpleIdentifier
+                token: named @33
+                staticElement: ConstructorMember
+                  base: package:test/foo.dart::<fragment>::@class::A::@constructor::named
+                  substitution: {T: int}
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @38
+                arguments
+                  IntegerLiteral
+                    literal: 0 @39
+                    staticType: int
+                rightParenthesis: ) @40
+              element: ConstructorMember
+                base: package:test/foo.dart::<fragment>::@class::A::@constructor::named
+                substitution: {T: int}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_named_prefixed_generic_typeArguments() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A<T> {
+  const A.named();
+}
+''');
+    var library = await buildLibrary('''
+import "foo.dart" as foo;
+@foo.A<int>.named()
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @52
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @26
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @27
+                  staticElement: <testLibraryFragment>::@prefix::foo
+                  staticType: null
+                period: . @30
+                identifier: SimpleIdentifier
+                  token: A @31
+                  staticElement: package:test/foo.dart::<fragment>::@class::A
+                  staticType: null
+                staticElement: package:test/foo.dart::<fragment>::@class::A
+                staticType: null
+              typeArguments: TypeArgumentList
+                leftBracket: < @32
+                arguments
+                  NamedType
+                    name: int @33
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @36
+              period: . @37
+              constructorName: SimpleIdentifier
+                token: named @38
+                staticElement: ConstructorMember
+                  base: package:test/foo.dart::<fragment>::@class::A::@constructor::named
+                  substitution: {T: int}
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @43
+                rightParenthesis: ) @44
+              element: ConstructorMember
+                base: package:test/foo.dart::<fragment>::@class::A::@constructor::named
+                substitution: {T: int}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_named_synthetic_ofClassAlias_generic() async {
+    var library = await buildLibrary('''
+class A {
+  const A.named();
+}
+
+mixin B {}
+
+class C<T> = A with B;
+
+@C.named()
+class D {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const named @20
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 19
+              nameEnd: 25
+        class alias C @50
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @52
+              defaultType: dynamic
+          supertype: A
+          mixins
+            B
+          constructors
+            synthetic const named @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  period: . @0
+                  constructorName: SimpleIdentifier
+                    token: named @-1
+                    staticElement: <testLibraryFragment>::@class::A::@constructor::named
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::named
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::named
+        class D @85
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @68
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: C @69
+                  staticElement: <testLibraryFragment>::@class::C
+                  staticType: null
+                period: . @70
+                identifier: SimpleIdentifier
+                  token: named @71
+                  staticElement: ConstructorMember
+                    base: <testLibraryFragment>::@class::C::@constructor::named
+                    substitution: {T: dynamic}
+                  staticType: null
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::C::@constructor::named
+                  substitution: {T: dynamic}
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @76
+                rightParenthesis: ) @77
+              element: ConstructorMember
+                base: <testLibraryFragment>::@class::C::@constructor::named
+                substitution: {T: dynamic}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+      mixins
+        mixin B @38
+          reference: <testLibraryFragment>::@mixin::B
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_metadata_constructor_call_unnamed() async {
+    var library = await buildLibrary('''
+class A {
+  const A(int _);
+}
+@A(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @24
+                  type: int
+        class C @42
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @30
+              name: SimpleIdentifier
+                token: A @31
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @32
+                arguments
+                  IntegerLiteral
+                    literal: 0 @33
+                    staticType: int
+                rightParenthesis: ) @34
+              element: <testLibraryFragment>::@class::A::@constructor::new
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_generic_inference() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A(T _);
+}
+
+@A(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @25
+                  type: T
+        class C @44
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @32
+              name: SimpleIdentifier
+                token: A @33
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @34
+                arguments
+                  IntegerLiteral
+                    literal: 0 @35
+                    staticType: int
+                rightParenthesis: ) @36
+              element: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: int}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_generic_typeArguments() async {
+    var library = await buildLibrary('''
+class A<T> {
+  const A();
+}
+
+@A<int>()
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class C @45
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: A @30
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              typeArguments: TypeArgumentList
+                leftBracket: < @31
+                arguments
+                  NamedType
+                    name: int @32
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @35
+              arguments: ArgumentList
+                leftParenthesis: ( @36
+                rightParenthesis: ) @37
+              element: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: int}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_prefixed() async {
+    addSource('$testPackageLibPath/foo.dart', 'class A { const A(_); }');
+    var library =
+        await buildLibrary('import "foo.dart" as foo; @foo.A(0) class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @42
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @26
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @27
+                  staticElement: <testLibraryFragment>::@prefix::foo
+                  staticType: null
+                period: . @30
+                identifier: SimpleIdentifier
+                  token: A @31
+                  staticElement: package:test/foo.dart::<fragment>::@class::A
+                  staticType: null
+                staticElement: package:test/foo.dart::<fragment>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @32
+                arguments
+                  IntegerLiteral
+                    literal: 0 @33
+                    staticType: int
+                rightParenthesis: ) @34
+              element: package:test/foo.dart::<fragment>::@class::A::@constructor::new
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_prefixed_generic_inference() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A<T> {
+  const A(T _);
+}
+''');
+    var library = await buildLibrary('''
+import "foo.dart" as foo;
+@foo.A(0)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @42
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @26
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @27
+                  staticElement: <testLibraryFragment>::@prefix::foo
+                  staticType: null
+                period: . @30
+                identifier: SimpleIdentifier
+                  token: A @31
+                  staticElement: package:test/foo.dart::<fragment>::@class::A
+                  staticType: null
+                staticElement: package:test/foo.dart::<fragment>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @32
+                arguments
+                  IntegerLiteral
+                    literal: 0 @33
+                    staticType: int
+                rightParenthesis: ) @34
+              element: ConstructorMember
+                base: package:test/foo.dart::<fragment>::@class::A::@constructor::new
+                substitution: {T: int}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_prefixed_generic_typeArguments() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A<T> {
+  const A();
+}
+''');
+    var library = await buildLibrary('''
+import "foo.dart" as foo;
+@foo.A<int>()
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @46
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @26
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @27
+                  staticElement: <testLibraryFragment>::@prefix::foo
+                  staticType: null
+                period: . @30
+                identifier: SimpleIdentifier
+                  token: A @31
+                  staticElement: package:test/foo.dart::<fragment>::@class::A
+                  staticType: null
+                staticElement: package:test/foo.dart::<fragment>::@class::A
+                staticType: null
+              typeArguments: TypeArgumentList
+                leftBracket: < @32
+                arguments
+                  NamedType
+                    name: int @33
+                    element: dart:core::<fragment>::@class::int
+                    type: int
+                rightBracket: > @36
+              arguments: ArgumentList
+                leftParenthesis: ( @37
+                rightParenthesis: ) @38
+              element: ConstructorMember
+                base: package:test/foo.dart::<fragment>::@class::A::@constructor::new
+                substitution: {T: int}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructor_call_unnamed_synthetic_ofClassAlias_generic() async {
+    var library = await buildLibrary('''
+class A {
+  const A();
+}
+
+mixin B {}
+
+class C<T> = A with B;
+
+@C()
+class D {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class alias C @44
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @46
+              defaultType: dynamic
+          supertype: A
+          mixins
+            B
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+        class D @73
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @62
+              name: SimpleIdentifier
+                token: C @63
+                staticElement: <testLibraryFragment>::@class::C
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @64
+                rightParenthesis: ) @65
+              element: ConstructorMember
+                base: <testLibraryFragment>::@class::C::@constructor::new
+                substitution: {T: dynamic}
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+      mixins
+        mixin B @32
+          reference: <testLibraryFragment>::@mixin::B
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_metadata_constructor_call_with_args() async {
+    var library =
+        await buildLibrary('class A { const A(x); } @A(null) class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @16
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional x @18
+                  type: dynamic
+        class C @39
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @24
+              name: SimpleIdentifier
+                token: A @25
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @26
+                arguments
+                  NullLiteral
+                    literal: null @27
+                    staticType: Null
+                rightParenthesis: ) @31
+              element: <testLibraryFragment>::@class::A::@constructor::new
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_constructorDeclaration_named() async {
+    var library =
+        await buildLibrary('const a = null; class C { @a C.named(); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            named @31
+              reference: <testLibraryFragment>::@class::C::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @26
+                  name: SimpleIdentifier
+                    token: a @27
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+              periodOffset: 30
+              nameEnd: 36
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_constructorDeclaration_unnamed() async {
+    var library = await buildLibrary('const a = null; class C { @a C(); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @29
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @26
+                  name: SimpleIdentifier
+                    token: a @27
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_exportDirective() async {
+    addSource('$testPackageLibPath/foo.dart', '');
+    var library = await buildLibrary('@a export "foo.dart"; const a = null;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  metadata
+    Annotation
+      atSign: @ @0
+      name: SimpleIdentifier
+        token: a @1
+        staticElement: <testLibraryFragment>::@getter::a
+        staticType: null
+      element: <testLibraryFragment>::@getter::a
+  libraryExports
+    package:test/foo.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      metadata
+        Annotation
+          atSign: @ @0
+          name: SimpleIdentifier
+            token: a @1
+            staticElement: <testLibraryFragment>::@getter::a
+            staticType: null
+          element: <testLibraryFragment>::@getter::a
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/foo.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: SimpleIdentifier
+                token: a @1
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+      topLevelVariables
+        static const a @28
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @32
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_fieldDeclaration() async {
+    var library = await buildLibrary('const a = null; class C { @a int x; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @33
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @26
+                  name: SimpleIdentifier
+                    token: a @27
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: int
+              returnType: void
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_fieldFormalParameter() async {
+    var library = await buildLibrary('''
+const a = null;
+class C {
+  var x;
+  C(@a this.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @32
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @37
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.x @47
+                  type: dynamic
+                  metadata
+                    Annotation
+                      atSign: @ @39
+                      name: SimpleIdentifier
+                        token: a @40
+                        staticElement: <testLibraryFragment>::@getter::a
+                        staticType: null
+                      element: <testLibraryFragment>::@getter::a
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_fieldFormalParameter_withDefault() async {
+    var library = await buildLibrary(
+        'const a = null; class C { var x; C([@a this.x = null]); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            x @30
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @33
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                optionalPositional default final this.x @44
+                  type: dynamic
+                  metadata
+                    Annotation
+                      atSign: @ @36
+                      name: SimpleIdentifier
+                        token: a @37
+                        staticElement: <testLibraryFragment>::@getter::a
+                        staticType: null
+                      element: <testLibraryFragment>::@getter::a
+                  constantInitializer
+                    NullLiteral
+                      literal: null @48
+                      staticType: Null
+                  field: <testLibraryFragment>::@class::C::@field::x
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+            synthetic set x= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _x @-1
+                  type: dynamic
+              returnType: void
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_functionDeclaration_function() async {
+    var library = await buildLibrary('''
+const a = null;
+@a
+f() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+      functions
+        f @19
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: a @17
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_functionDeclaration_getter() async {
+    var library = await buildLibrary('const a = null; @a get f => null;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+        synthetic static f @-1
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        static get f @23
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: a @17
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_functionDeclaration_setter() async {
+    var library = await buildLibrary('const a = null; @a set f(value) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+        synthetic static f @-1
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        static set f= @23
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: a @17
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+          parameters
+            requiredPositional value @25
+              type: dynamic
+          returnType: void
+''');
+  }
+
+  test_metadata_functionTypeAlias() async {
+    var library = await buildLibrary('const a = null; @a typedef F();');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @27
+          reference: <testLibraryFragment>::@typeAlias::F
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: a @17
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_functionTypedFormalParameter() async {
+    var library = await buildLibrary('const a = null; f(@a g()) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+      functions
+        f @16
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional g @21
+              type: dynamic Function()
+              metadata
+                Annotation
+                  atSign: @ @18
+                  name: SimpleIdentifier
+                    token: a @19
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_functionTypedFormalParameter_withDefault() async {
+    var library = await buildLibrary('const a = null; f([@a g() = null]) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+      functions
+        f @16
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalPositional default g @22
+              type: dynamic Function()
+              metadata
+                Annotation
+                  atSign: @ @19
+                  name: SimpleIdentifier
+                    token: a @20
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+              constantInitializer
+                NullLiteral
+                  literal: null @28
+                  staticType: null
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_genericTypeAlias() async {
+    var library = await buildLibrary(r'''
+const a = null;
+const b = null;
+@a
+@b
+typedef F = void Function();''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @46
+          reference: <testLibraryFragment>::@typeAlias::F
+          metadata
+            Annotation
+              atSign: @ @32
+              name: SimpleIdentifier
+                token: a @33
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+            Annotation
+              atSign: @ @35
+              name: SimpleIdentifier
+                token: b @36
+                staticElement: <testLibraryFragment>::@getter::b
+                staticType: null
+              element: <testLibraryFragment>::@getter::b
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+        static const b @22
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @26
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_inAliasedElement_formalParameter() async {
+    var library = await buildLibrary('''
+const a = 42;
+typedef F = void Function(@a int first)
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @22
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function(int)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional first @47
+                type: int
+                metadata
+                  Annotation
+                    atSign: @ @40
+                    name: SimpleIdentifier
+                      token: a @41
+                      staticElement: <testLibraryFragment>::@getter::a
+                      staticType: null
+                    element: <testLibraryFragment>::@getter::a
+            returnType: void
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 42 @10
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_inAliasedElement_formalParameter2() async {
+    var library = await buildLibrary('''
+const a = 42;
+typedef F = void Function(int foo(@a int bar))
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @22
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function(int Function(int))
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional foo @44
+                type: int Function(int)
+                parameters
+                  requiredPositional bar @55
+                    type: int
+                    metadata
+                      Annotation
+                        atSign: @ @48
+                        name: SimpleIdentifier
+                          token: a @49
+                          staticElement: <testLibraryFragment>::@getter::a
+                          staticType: null
+                        element: <testLibraryFragment>::@getter::a
+            returnType: void
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 42 @10
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_inAliasedElement_typeParameter() async {
+    var library = await buildLibrary('''
+const a = 42;
+typedef F = void Function<@a T>(int first)
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @22
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function<T>(int)
+          aliasedElement: GenericFunctionTypeElement
+            typeParameters
+              covariant T @43
+                metadata
+                  Annotation
+                    atSign: @ @40
+                    name: SimpleIdentifier
+                      token: a @41
+                      staticElement: <testLibraryFragment>::@getter::a
+                      staticType: null
+                    element: <testLibraryFragment>::@getter::a
+            parameters
+              requiredPositional first @50
+                type: int
+            returnType: void
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 42 @10
+              staticType: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_invalid_classDeclaration() async {
+    var library = await buildLibrary('f(_) {} @f(42) class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @21
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @8
+              name: SimpleIdentifier
+                token: f @9
+                staticElement: <testLibraryFragment>::@function::f
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @10
+                arguments
+                  IntegerLiteral
+                    literal: 42 @11
+                    staticType: int
+                rightParenthesis: ) @13
+              element: <testLibraryFragment>::@function::f
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _ @2
+              type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_library_importAugmentation_augmentation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+''');
+    var library = await buildLibrary('''
+@deprecated
+import augment 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      metadata
+        Annotation
+          atSign: @ @0
+          name: SimpleIdentifier
+            token: deprecated @1
+            staticElement: dart:core::<fragment>::@getter::deprecated
+            staticType: null
+          element: dart:core::<fragment>::@getter::deprecated
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  /// Even though the target is not an augmentation, metadata is available.
+  test_metadata_library_importAugmentation_notAugmentation_library() async {
+    var library = await buildLibrary('''
+@deprecated
+import augment 'dart:math';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    source 'dart:math'
+      enclosingElement: <testLibrary>
+      metadata
+        Annotation
+          atSign: @ @0
+          name: SimpleIdentifier
+            token: deprecated @1
+            staticElement: dart:core::<fragment>::@getter::deprecated
+            staticType: null
+          element: dart:core::<fragment>::@getter::deprecated
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+''');
+  }
+
+  test_metadata_libraryDirective() async {
+    var library = await buildLibrary('@a library L; const a = null;');
+    checkElementText(library, r'''
+library
+  name: L
+  nameOffset: 11
+  reference: <testLibrary>
+  metadata
+    Annotation
+      atSign: @ @0
+      name: SimpleIdentifier
+        token: a @1
+        staticElement: <testLibraryFragment>::@getter::a
+        staticType: null
+      element: <testLibraryFragment>::@getter::a
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @20
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @24
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_methodDeclaration_getter() async {
+    var library =
+        await buildLibrary('const a = null; class C { @a get m => null; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic m @-1
+              reference: <testLibraryFragment>::@class::C::@field::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            get m @33
+              reference: <testLibraryFragment>::@class::C::@getter::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @26
+                  name: SimpleIdentifier
+                    token: a @27
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+              returnType: dynamic
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_methodDeclaration_method() async {
+    var library = await buildLibrary(r'''
+const a = null;
+const b = null;
+class C {
+  @a
+  @b
+  m() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @38
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            m @54
+              reference: <testLibraryFragment>::@class::C::@method::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @44
+                  name: SimpleIdentifier
+                    token: a @45
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+                Annotation
+                  atSign: @ @49
+                  name: SimpleIdentifier
+                    token: b @50
+                    staticElement: <testLibraryFragment>::@getter::b
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::b
+              returnType: dynamic
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+        static const b @22
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @26
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_methodDeclaration_method_mixin() async {
+    var library = await buildLibrary(r'''
+const a = null;
+const b = null;
+mixin M {
+  @a
+  @b
+  m() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @38
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          methods
+            m @54
+              reference: <testLibraryFragment>::@mixin::M::@method::m
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              metadata
+                Annotation
+                  atSign: @ @44
+                  name: SimpleIdentifier
+                    token: a @45
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+                Annotation
+                  atSign: @ @49
+                  name: SimpleIdentifier
+                    token: b @50
+                    staticElement: <testLibraryFragment>::@getter::b
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::b
+              returnType: dynamic
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+        static const b @22
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @26
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_methodDeclaration_setter() async {
+    var library = await buildLibrary('''
+const a = null;
+class C {
+  @a
+  set m(value) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic m @-1
+              reference: <testLibraryFragment>::@class::C::@field::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            set m= @37
+              reference: <testLibraryFragment>::@class::C::@setter::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @28
+                  name: SimpleIdentifier
+                    token: a @29
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+              parameters
+                requiredPositional value @39
+                  type: dynamic
+              returnType: void
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_mixin_scope() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+mixin M<@foo T> {
+  static const foo = 1;
+  @foo
+  void bar() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @27
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            covariant T @34
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @29
+                  name: SimpleIdentifier
+                    token: foo @30
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          superclassConstraints
+            Object
+          fields
+            static const foo @54
+              reference: <testLibraryFragment>::@mixin::M::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 1 @60
+                  staticType: int
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@mixin::M::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              returnType: int
+          methods
+            bar @77
+              reference: <testLibraryFragment>::@mixin::M::@method::bar
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              metadata
+                Annotation
+                  atSign: @ @65
+                  name: SimpleIdentifier
+                    token: foo @66
+                    staticElement: <testLibraryFragment>::@mixin::M::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@mixin::M::@getter::foo
+              returnType: void
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_mixinDeclaration() async {
+    var library = await buildLibrary(r'''
+const a = null;
+const b = null;
+@a
+@b
+mixin M {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @44
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @32
+              name: SimpleIdentifier
+                token: a @33
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+            Annotation
+              atSign: @ @35
+              name: SimpleIdentifier
+                token: b @36
+                staticElement: <testLibraryFragment>::@getter::b
+                staticType: null
+              element: <testLibraryFragment>::@getter::b
+          superclassConstraints
+            Object
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+        static const b @22
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @26
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_offsets_onClass() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+class A<@foo T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @27
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            covariant T @34
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @29
+                  name: SimpleIdentifier
+                    token: foo @30
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onClassConstructor() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {
+  @foo
+  A(@foo int a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @22
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @35
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              metadata
+                Annotation
+                  atSign: @ @28
+                  name: SimpleIdentifier
+                    token: foo @29
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+              parameters
+                requiredPositional a @46
+                  type: int
+                  metadata
+                    Annotation
+                      atSign: @ @37
+                      name: SimpleIdentifier
+                        token: foo @38
+                        staticElement: <testLibraryFragment>::@getter::foo
+                        staticType: null
+                      element: <testLibraryFragment>::@getter::foo
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onClassGetter() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {
+  @foo
+  int get getter => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @22
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic getter @-1
+              reference: <testLibraryFragment>::@class::A::@field::getter
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get getter @43
+              reference: <testLibraryFragment>::@class::A::@getter::getter
+              enclosingElement: <testLibraryFragment>::@class::A
+              metadata
+                Annotation
+                  atSign: @ @28
+                  name: SimpleIdentifier
+                    token: foo @29
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+              returnType: int
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onClassMethod() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {
+  @foo
+  void method<@foo T>(@foo int a) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @22
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            method @40
+              reference: <testLibraryFragment>::@class::A::@method::method
+              enclosingElement: <testLibraryFragment>::@class::A
+              metadata
+                Annotation
+                  atSign: @ @28
+                  name: SimpleIdentifier
+                    token: foo @29
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+              typeParameters
+                covariant T @52
+                  defaultType: dynamic
+                  metadata
+                    Annotation
+                      atSign: @ @47
+                      name: SimpleIdentifier
+                        token: foo @48
+                        staticElement: <testLibraryFragment>::@getter::foo
+                        staticType: null
+                      element: <testLibraryFragment>::@getter::foo
+              parameters
+                requiredPositional a @64
+                  type: int
+                  metadata
+                    Annotation
+                      atSign: @ @55
+                      name: SimpleIdentifier
+                        token: foo @56
+                        staticElement: <testLibraryFragment>::@getter::foo
+                        staticType: null
+                      element: <testLibraryFragment>::@getter::foo
+              returnType: void
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onClassSetter() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {
+  @foo
+  set setter(@foo int a) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @22
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic setter @-1
+              reference: <testLibraryFragment>::@class::A::@field::setter
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            set setter= @39
+              reference: <testLibraryFragment>::@class::A::@setter::setter
+              enclosingElement: <testLibraryFragment>::@class::A
+              metadata
+                Annotation
+                  atSign: @ @28
+                  name: SimpleIdentifier
+                    token: foo @29
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+              parameters
+                requiredPositional a @55
+                  type: int
+                  metadata
+                    Annotation
+                      atSign: @ @46
+                      name: SimpleIdentifier
+                        token: foo @47
+                        staticElement: <testLibraryFragment>::@getter::foo
+                        staticType: null
+                      element: <testLibraryFragment>::@getter::foo
+              returnType: void
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onClassTypeAlias() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {}
+mixin M {}
+
+@foo
+class B<@foo T> = A with M;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @22
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class alias B @50
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @39
+              name: SimpleIdentifier
+                token: foo @40
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            covariant T @57
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @52
+                  name: SimpleIdentifier
+                    token: foo @53
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          supertype: A
+          mixins
+            M
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+      mixins
+        mixin M @33
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onEnum() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+enum E {
+  @foo e1,
+  e2,
+  @foo e3,
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @26
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          supertype: Enum
+          fields
+            static const enumConstant e1 @37
+              reference: <testLibraryFragment>::@enum::E::@field::e1
+              enclosingElement: <testLibraryFragment>::@enum::E
+              metadata
+                Annotation
+                  atSign: @ @32
+                  name: SimpleIdentifier
+                    token: foo @33
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant e2 @43
+              reference: <testLibraryFragment>::@enum::E::@field::e2
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant e3 @54
+              reference: <testLibraryFragment>::@enum::E::@field::e3
+              enclosingElement: <testLibraryFragment>::@enum::E
+              metadata
+                Annotation
+                  atSign: @ @49
+                  name: SimpleIdentifier
+                    token: foo @50
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: e1 @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::e1
+                      staticType: E
+                    SimpleIdentifier
+                      token: e2 @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::e2
+                      staticType: E
+                    SimpleIdentifier
+                      token: e3 @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::e3
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get e1 @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::e1
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get e2 @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::e2
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get e3 @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::e3
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onExtension() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+extension E<@foo T> on List<T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        E @31
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            covariant T @38
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @33
+                  name: SimpleIdentifier
+                    token: foo @34
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          extendedType: List<T>
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onFieldDeclaration() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+class A {
+  @foo
+  static isStatic = 1;
+
+  @foo
+  static const isStaticConst = 2;
+
+  @foo
+  var isInstance = 3;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @22
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            static isStatic @42
+              reference: <testLibraryFragment>::@class::A::@field::isStatic
+              enclosingElement: <testLibraryFragment>::@class::A
+              metadata
+                Annotation
+                  atSign: @ @28
+                  name: SimpleIdentifier
+                    token: foo @29
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+              type: int
+              shouldUseTypeForInitializerInference: false
+            static const isStaticConst @79
+              reference: <testLibraryFragment>::@class::A::@field::isStaticConst
+              enclosingElement: <testLibraryFragment>::@class::A
+              metadata
+                Annotation
+                  atSign: @ @59
+                  name: SimpleIdentifier
+                    token: foo @60
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 2 @95
+                  staticType: int
+            isInstance @112
+              reference: <testLibraryFragment>::@class::A::@field::isInstance
+              enclosingElement: <testLibraryFragment>::@class::A
+              metadata
+                Annotation
+                  atSign: @ @101
+                  name: SimpleIdentifier
+                    token: foo @102
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic static get isStatic @-1
+              reference: <testLibraryFragment>::@class::A::@getter::isStatic
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+            synthetic static set isStatic= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::isStatic
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _isStatic @-1
+                  type: int
+              returnType: void
+            synthetic static get isStaticConst @-1
+              reference: <testLibraryFragment>::@class::A::@getter::isStaticConst
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+            synthetic get isInstance @-1
+              reference: <testLibraryFragment>::@class::A::@getter::isInstance
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+            synthetic set isInstance= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::isInstance
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _isInstance @-1
+                  type: int
+              returnType: void
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onLibrary() async {
+    var library = await buildLibrary('''
+/// Some documentation.
+@foo
+library my.lib;
+
+const foo = 0;
+''');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 37
+  reference: <testLibrary>
+  documentationComment: /// Some documentation.
+  metadata
+    Annotation
+      atSign: @ @24
+      name: SimpleIdentifier
+        token: foo @25
+        staticElement: <testLibraryFragment>::@getter::foo
+        staticType: null
+      element: <testLibraryFragment>::@getter::foo
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const foo @52
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @58
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onMixin() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+mixin A<@foo T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @27
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            covariant T @34
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @29
+                  name: SimpleIdentifier
+                    token: foo @30
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          superclassConstraints
+            Object
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onTypeAlias_classic() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+typedef void F<@foo T>(@foo int a);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @34
+          reference: <testLibraryFragment>::@typeAlias::F
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            unrelated T @41
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @36
+                  name: SimpleIdentifier
+                    token: foo @37
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          aliasedType: void Function(int)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @53
+                type: int
+                metadata
+                  Annotation
+                    atSign: @ @44
+                    name: SimpleIdentifier
+                      token: foo @45
+                      staticElement: <testLibraryFragment>::@getter::foo
+                      staticType: null
+                    element: <testLibraryFragment>::@getter::foo
+            returnType: void
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onTypeAlias_genericFunctionType() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+typedef A<@foo T> = void Function<@foo U>(@foo int a);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @29
+          reference: <testLibraryFragment>::@typeAlias::A
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            unrelated T @36
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @31
+                  name: SimpleIdentifier
+                    token: foo @32
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          aliasedType: void Function<U>(int)
+          aliasedElement: GenericFunctionTypeElement
+            typeParameters
+              covariant U @60
+                metadata
+                  Annotation
+                    atSign: @ @55
+                    name: SimpleIdentifier
+                      token: foo @56
+                      staticElement: <testLibraryFragment>::@getter::foo
+                      staticType: null
+                    element: <testLibraryFragment>::@getter::foo
+            parameters
+              requiredPositional a @72
+                type: int
+                metadata
+                  Annotation
+                    atSign: @ @63
+                    name: SimpleIdentifier
+                      token: foo @64
+                      staticElement: <testLibraryFragment>::@getter::foo
+                      staticType: null
+                    element: <testLibraryFragment>::@getter::foo
+            returnType: void
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onUnit() async {
+    addSource('$testPackageLibPath/a.dart', '''
+part of my.lib;
+''');
+
+    addSource('$testPackageLibPath/b.dart', '''
+part of my.lib;
+''');
+
+    var library = await buildLibrary('''
+library my.lib;
+
+@foo
+part 'a.dart';
+
+@foo
+part 'b.dart';
+
+const foo = 0;
+''');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+    part_1
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @17
+              name: SimpleIdentifier
+                token: foo @18
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          unit: <testLibrary>::@fragment::package:test/a.dart
+        part_1
+          uri: package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @38
+              name: SimpleIdentifier
+                token: foo @39
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          unit: <testLibrary>::@fragment::package:test/b.dart
+      topLevelVariables
+        static const foo @65
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @71
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_metadata_offsets_onUnitFunction() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+void f<@foo T>({@foo int? a = 42}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+      functions
+        f @26
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            covariant T @33
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @28
+                  name: SimpleIdentifier
+                    token: foo @29
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          parameters
+            optionalNamed default a @47
+              reference: <testLibraryFragment>::@function::f::@parameter::a
+              type: int?
+              metadata
+                Annotation
+                  atSign: @ @37
+                  name: SimpleIdentifier
+                    token: foo @38
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+              constantInitializer
+                IntegerLiteral
+                  literal: 42 @51
+                  staticType: int
+          returnType: void
+''');
+  }
+
+  test_metadata_offsets_onUnitGetter() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+int get getter => 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+        synthetic static getter @-1
+          reference: <testLibraryFragment>::@topLevelVariable::getter
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        static get getter @29
+          reference: <testLibraryFragment>::@getter::getter
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          returnType: int
+''');
+  }
+
+  test_metadata_offsets_onUnitSetter() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+set setter(@foo int a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+        synthetic static setter @-1
+          reference: <testLibraryFragment>::@topLevelVariable::setter
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        static set setter= @25
+          reference: <testLibraryFragment>::@setter::setter
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          parameters
+            requiredPositional a @41
+              type: int
+              metadata
+                Annotation
+                  atSign: @ @32
+                  name: SimpleIdentifier
+                    token: foo @33
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
+          returnType: void
+''');
+  }
+
+  test_metadata_offsets_onUnitVariable() async {
+    var library = await buildLibrary(r'''
+const foo = 0;
+
+@foo
+var isNotConst = 1;
+
+@foo
+const isConst = 2;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const foo @6
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @12
+              staticType: int
+        static isNotConst @25
+          reference: <testLibraryFragment>::@topLevelVariable::isNotConst
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: foo @17
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          type: int
+          shouldUseTypeForInitializerInference: false
+        static const isConst @53
+          reference: <testLibraryFragment>::@topLevelVariable::isConst
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @42
+              name: SimpleIdentifier
+                token: foo @43
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 2 @63
+              staticType: int
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get isNotConst @-1
+          reference: <testLibraryFragment>::@getter::isNotConst
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set isNotConst= @-1
+          reference: <testLibraryFragment>::@setter::isNotConst
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _isNotConst @-1
+              type: int
+          returnType: void
+        synthetic static get isConst @-1
+          reference: <testLibraryFragment>::@getter::isConst
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_metadata_partDirective() async {
+    addSource('$testPackageLibPath/foo.dart', 'part of L;');
+    var library = await buildLibrary('''
+library L;
+@a
+part 'foo.dart';
+const a = null;''');
+    checkElementText(library, r'''
+library
+  name: L
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/foo.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @11
+              name: SimpleIdentifier
+                token: a @12
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+          unit: <testLibrary>::@fragment::package:test/foo.dart
+      topLevelVariables
+        static const a @37
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @41
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+    <testLibrary>::@fragment::package:test/foo.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_metadata_partDirective2() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+part of 'test.dart';
+''');
+    addSource('$testPackageLibPath/b.dart', r'''
+part of 'test.dart';
+''');
+    var library = await buildLibrary('''
+part 'a.dart';
+part 'b.dart';
+''');
+
+    // The difference with the test above is that we ask the part first.
+    // There was a bug that we were not loading library directives.
+    expect(library.parts[0].metadata, isEmpty);
+  }
+
+  test_metadata_prefixed_variable() async {
+    addSource('$testPackageLibPath/a.dart', 'const b = null;');
+    var library = await buildLibrary('import "a.dart" as a; @a.b class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart as a @19
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    a @19
+      reference: <testLibraryFragment>::@prefix::a
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart as a @19
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        a @19
+          reference: <testLibraryFragment>::@prefix::a
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @33
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @22
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: a @23
+                  staticElement: <testLibraryFragment>::@prefix::a
+                  staticType: null
+                period: . @24
+                identifier: SimpleIdentifier
+                  token: b @25
+                  staticElement: package:test/a.dart::<fragment>::@getter::b
+                  staticType: null
+                staticElement: package:test/a.dart::<fragment>::@getter::b
+                staticType: null
+              element: package:test/a.dart::<fragment>::@getter::b
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_simpleFormalParameter() async {
+    var library = await buildLibrary('const a = null; f(@a x) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+      functions
+        f @16
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional x @21
+              type: dynamic
+              metadata
+                Annotation
+                  atSign: @ @18
+                  name: SimpleIdentifier
+                    token: a @19
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_simpleFormalParameter_method() async {
+    var library = await buildLibrary('''
+const a = null;
+
+class C {
+  m(@a x) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @23
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            m @29
+              reference: <testLibraryFragment>::@class::C::@method::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional x @34
+                  type: dynamic
+                  metadata
+                    Annotation
+                      atSign: @ @31
+                      name: SimpleIdentifier
+                        token: a @32
+                        staticElement: <testLibraryFragment>::@getter::a
+                        staticType: null
+                      element: <testLibraryFragment>::@getter::a
+              returnType: dynamic
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_simpleFormalParameter_unit_setter() async {
+    var library = await buildLibrary('''
+const a = null;
+
+set foo(@a int x) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        static set foo= @21
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional x @32
+              type: int
+              metadata
+                Annotation
+                  atSign: @ @25
+                  name: SimpleIdentifier
+                    token: a @26
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+          returnType: void
+''');
+  }
+
+  test_metadata_simpleFormalParameter_withDefault() async {
+    var library = await buildLibrary('const a = null; f([@a x = null]) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+      functions
+        f @16
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalPositional default x @22
+              type: dynamic
+              metadata
+                Annotation
+                  atSign: @ @19
+                  name: SimpleIdentifier
+                    token: a @20
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+              constantInitializer
+                NullLiteral
+                  literal: null @26
+                  staticType: Null
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_superFormalParameter() async {
+    var library = await buildLibrary('''
+const a = null;
+
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B(@a super.x);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @23
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @29
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional x @35
+                  type: int
+        class B @48
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            @64
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional final super.x @75
+                  type: int
+                  metadata
+                    Annotation
+                      atSign: @ @66
+                      name: SimpleIdentifier
+                        token: a @67
+                        staticElement: <testLibraryFragment>::@getter::a
+                        staticType: null
+                      element: <testLibraryFragment>::@getter::a
+                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::x
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_topLevelVariableDeclaration() async {
+    var library = await buildLibrary('const a = null; @a int v;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+        static v @23
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @16
+              name: SimpleIdentifier
+                token: a @17
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+          type: int
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_metadata_typeParameter_ofClass() async {
+    var library = await buildLibrary('const a = null; class C<@a T> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @27
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @24
+                  name: SimpleIdentifier
+                    token: a @25
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_typeParameter_ofClassTypeAlias() async {
+    var library = await buildLibrary('''
+const a = null;
+class C<@a T> = D with E;
+class D {}
+class E {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias C @22
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @27
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @24
+                  name: SimpleIdentifier
+                    token: a @25
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+          supertype: D
+          mixins
+            E
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+        class D @48
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+        class E @59
+          reference: <testLibraryFragment>::@class::E
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::E
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_typeParameter_ofFunction() async {
+    var library = await buildLibrary('const a = null; f<@a T>() {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+      functions
+        f @16
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @21
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @18
+                  name: SimpleIdentifier
+                    token: a @19
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_typeParameter_ofTypedef() async {
+    var library = await buildLibrary('const a = null; typedef F<@a T>();');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @24
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated T @29
+              defaultType: dynamic
+              metadata
+                Annotation
+                  atSign: @ @26
+                  name: SimpleIdentifier
+                    token: a @27
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            NullLiteral
+              literal: null @10
+              staticType: Null
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_metadata_unit_topLevelVariable_first() async {
+    var library = await buildLibrary(r'''
+const a = 0;
+@a
+int x = 0;
+''');
+    // Check metadata without asking any other properties.
+    var x = _elementOfDefiningUnit(library, ['@topLevelVariable', 'x'])
+        as TopLevelVariableElement;
+    expect(x.metadata, hasLength(1));
+    // Check details.
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @10
+              staticType: int
+        static x @20
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @13
+              name: SimpleIdentifier
+                token: a @14
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
+          type: int
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_metadata_value_class_staticField() async {
+    var library = await buildLibrary('''
+class A {
+  static const x = 0;
+}
+@A.x
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            static const x @25
+              reference: <testLibraryFragment>::@class::A::@field::x
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @29
+                  staticType: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic static get x @-1
+              reference: <testLibraryFragment>::@class::A::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+        class C @45
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @34
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: A @35
+                  staticElement: <testLibraryFragment>::@class::A
+                  staticType: null
+                period: . @36
+                identifier: SimpleIdentifier
+                  token: x @37
+                  staticElement: <testLibraryFragment>::@class::A::@getter::x
+                  staticType: null
+                staticElement: <testLibraryFragment>::@class::A::@getter::x
+                staticType: null
+              element: <testLibraryFragment>::@class::A::@getter::x
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_metadata_value_enum_constant() async {
+    var library = await buildLibrary('''
+enum E {a, b, c}
+@E.b
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @28
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @17
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: E @18
+                  staticElement: <testLibraryFragment>::@enum::E
+                  staticType: null
+                period: . @19
+                identifier: SimpleIdentifier
+                  token: b @20
+                  staticElement: <testLibraryFragment>::@enum::E::@getter::b
+                  staticType: null
+                staticElement: <testLibraryFragment>::@enum::E::@getter::b
+                staticType: null
+              element: <testLibraryFragment>::@enum::E::@getter::b
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant a @8
+              reference: <testLibraryFragment>::@enum::E::@field::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant b @11
+              reference: <testLibraryFragment>::@enum::E::@field::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            static const enumConstant c @14
+              reference: <testLibraryFragment>::@enum::E::@field::c
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: a @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
+                      staticType: E
+                    SimpleIdentifier
+                      token: b @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
+                      staticType: E
+                    SimpleIdentifier
+                      token: c @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::c
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get b @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get c @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::c
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_metadata_value_extension_staticField() async {
+    var library = await buildLibrary('''
+extension E on int {
+  static const x = 0;
+}
+@E.x
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @56
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @45
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: E @46
+                  staticElement: <testLibraryFragment>::@extension::E
+                  staticType: null
+                period: . @47
+                identifier: SimpleIdentifier
+                  token: x @48
+                  staticElement: <testLibraryFragment>::@extension::E::@getter::x
+                  staticType: null
+                staticElement: <testLibraryFragment>::@extension::E::@getter::x
+                staticType: null
+              element: <testLibraryFragment>::@extension::E::@getter::x
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      extensions
+        E @10
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          extendedType: int
+          fields
+            static const x @36
+              reference: <testLibraryFragment>::@extension::E::@field::x
+              enclosingElement: <testLibraryFragment>::@extension::E
+              type: int
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                IntegerLiteral
+                  literal: 0 @40
+                  staticType: int
+          accessors
+            synthetic static get x @-1
+              reference: <testLibraryFragment>::@extension::E::@getter::x
+              enclosingElement: <testLibraryFragment>::@extension::E
+              returnType: int
+''');
+  }
+
+  test_metadata_value_prefix_extension_staticField() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+extension E on int {
+  static const x = 0;
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+@foo.E.x
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @41
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @26
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @27
+                  staticElement: <testLibraryFragment>::@prefix::foo
+                  staticType: null
+                period: . @30
+                identifier: SimpleIdentifier
+                  token: E @31
+                  staticElement: package:test/foo.dart::<fragment>::@extension::E
+                  staticType: null
+                staticElement: package:test/foo.dart::<fragment>::@extension::E
+                staticType: null
+              period: . @32
+              constructorName: SimpleIdentifier
+                token: x @33
+                staticElement: package:test/foo.dart::<fragment>::@extension::E::@getter::x
+                staticType: null
+              element: package:test/foo.dart::<fragment>::@extension::E::@getter::x
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_instanceCreation_argument_super() async {
+    var library = await buildLibrary('''
+class A {
+  const A(_);
+}
+
+@A(super)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @20
+                  type: dynamic
+        class C @43
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @27
+              name: SimpleIdentifier
+                token: A @28
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @29
+                arguments
+                  SuperExpression
+                    superKeyword: super @30
+                    staticType: InvalidType
+                rightParenthesis: ) @35
+              element: <testLibraryFragment>::@class::A::@constructor::new
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_instanceCreation_argument_this() async {
+    var library = await buildLibrary('''
+class A {
+  const A(_);
+}
+
+@A(this)
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @18
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @20
+                  type: dynamic
+        class C @42
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @27
+              name: SimpleIdentifier
+                token: A @28
+                staticElement: <testLibraryFragment>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @29
+                arguments
+                  ThisExpression
+                    thisKeyword: this @30
+                    staticType: dynamic
+                rightParenthesis: ) @34
+              element: <testLibraryFragment>::@class::A::@constructor::new
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_namedConstructorCall_noClass() async {
+    var library = await buildLibrary('@foo.bar() class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @17
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @1
+                  staticElement: <null>
+                  staticType: null
+                period: . @4
+                identifier: SimpleIdentifier
+                  token: bar @5
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @8
+                rightParenthesis: ) @9
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_namedConstructorCall_noConstructor() async {
+    var library = await buildLibrary('@String.foo() class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @20
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: String @1
+                  staticElement: dart:core::<fragment>::@class::String
+                  staticType: null
+                period: . @7
+                identifier: SimpleIdentifier
+                  token: foo @8
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @11
+                rightParenthesis: ) @12
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_prefixedIdentifier_badPrefix() async {
+    var library = await buildLibrary('@foo.bar class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @15
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @1
+                  staticElement: <null>
+                  staticType: null
+                period: . @4
+                identifier: SimpleIdentifier
+                  token: bar @5
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+                staticType: null
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_prefixedIdentifier_noDeclaration() async {
+    var library =
+        await buildLibrary('import "dart:async" as foo; @foo.bar class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async as foo @23
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @23
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async as foo @23
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @23
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @43
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @28
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @29
+                  staticElement: <testLibraryFragment>::@prefix::foo
+                  staticType: null
+                period: . @32
+                identifier: SimpleIdentifier
+                  token: bar @33
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+                staticType: null
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_prefixedNamedConstructorCall_badPrefix() async {
+    var library = await buildLibrary('@foo.bar.baz() class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @21
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @1
+                  staticElement: <null>
+                  staticType: null
+                period: . @4
+                identifier: SimpleIdentifier
+                  token: bar @5
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+                staticType: null
+              period: . @8
+              constructorName: SimpleIdentifier
+                token: baz @9
+                staticElement: <null>
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @12
+                rightParenthesis: ) @13
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_prefixedNamedConstructorCall_noClass() async {
+    var library = await buildLibrary(
+        'import "dart:async" as foo; @foo.bar.baz() class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async as foo @23
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @23
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async as foo @23
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @23
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @49
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @28
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @29
+                  staticElement: <testLibraryFragment>::@prefix::foo
+                  staticType: null
+                period: . @32
+                identifier: SimpleIdentifier
+                  token: bar @33
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+                staticType: null
+              period: . @36
+              constructorName: SimpleIdentifier
+                token: baz @37
+                staticElement: <null>
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @40
+                rightParenthesis: ) @41
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_prefixedNamedConstructorCall_noConstructor() async {
+    var library = await buildLibrary(
+        'import "dart:async" as foo; @foo.Future.bar() class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async as foo @23
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @23
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async as foo @23
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @23
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @52
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @28
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @29
+                  staticElement: <testLibraryFragment>::@prefix::foo
+                  staticType: null
+                period: . @32
+                identifier: SimpleIdentifier
+                  token: Future @33
+                  staticElement: dart:async::<fragment>::@class::Future
+                  staticType: null
+                staticElement: dart:async::<fragment>::@class::Future
+                staticType: null
+              period: . @39
+              constructorName: SimpleIdentifier
+                token: bar @40
+                staticElement: <null>
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @43
+                rightParenthesis: ) @44
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_prefixedUnnamedConstructorCall_badPrefix() async {
+    var library = await buildLibrary('@foo.bar() class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @17
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @1
+                  staticElement: <null>
+                  staticType: null
+                period: . @4
+                identifier: SimpleIdentifier
+                  token: bar @5
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @8
+                rightParenthesis: ) @9
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_prefixedUnnamedConstructorCall_noClass() async {
+    var library =
+        await buildLibrary('import "dart:async" as foo; @foo.bar() class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async as foo @23
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @23
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async as foo @23
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @23
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @45
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @28
+              name: PrefixedIdentifier
+                prefix: SimpleIdentifier
+                  token: foo @29
+                  staticElement: <testLibraryFragment>::@prefix::foo
+                  staticType: null
+                period: . @32
+                identifier: SimpleIdentifier
+                  token: bar @33
+                  staticElement: <null>
+                  staticType: null
+                staticElement: <null>
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @36
+                rightParenthesis: ) @37
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_simpleIdentifier() async {
+    var library = await buildLibrary('@foo class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @11
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: SimpleIdentifier
+                token: foo @1
+                staticElement: <null>
+                staticType: null
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_simpleIdentifier_multiplyDefined() async {
+    addSource('$testPackageLibPath/a.dart', 'const v = 0;');
+    addSource('$testPackageLibPath/b.dart', 'const v = 0;');
+    var library = await buildLibrary('''
+import 'a.dart';
+import 'b.dart';
+
+@v
+class C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @44
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @35
+              name: SimpleIdentifier
+                token: v @36
+                staticElement: <null>
+                staticType: null
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  test_unresolved_annotation_unnamedConstructorCall_noClass() async {
+    var library = await buildLibrary('@foo() class C {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @13
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @0
+              name: SimpleIdentifier
+                token: foo @1
+                staticElement: <null>
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @4
+                rightParenthesis: ) @5
+              element: <null>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+''');
+  }
+
+  // TODO(scheglov): This is duplicate.
+  Element _elementOfDefiningUnit(
+      LibraryElementImpl library, List<String> names) {
+    var reference = library.definingCompilationUnit.reference!;
+    for (var name in names) {
+      reference = reference.getChild(name);
+    }
+
+    var element = reference.element;
+    if (element != null) {
+      return element;
+    }
+
+    var elementFactory = library.linkedData!.elementFactory;
+    return elementFactory.elementOfReference(reference)!;
+  }
+}
+
+@reflectiveTest
+class MetadataElementTest_fromBytes extends MetadataElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class MetadataElementTest_keepLinking extends MetadataElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/mixin_test.dart b/pkg/analyzer/test/src/summary/elements/mixin_test.dart
new file mode 100644
index 0000000..6e353b7
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/mixin_test.dart
@@ -0,0 +1,4697 @@
+// Copyright (c) 2024, 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/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(MixinElementTest_keepLinking);
+    defineReflectiveTests(MixinElementTest_fromBytes);
+    defineReflectiveTests(MixinElementTest_augmentation_fromBytes);
+    defineReflectiveTests(MixinElementTest_augmentation_keepLinking);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class MixinElementTest extends ElementsBaseTest {
+  test_mixin() async {
+    var library = await buildLibrary(r'''
+class A {}
+class B {}
+class C {}
+class D {}
+
+mixin M<T extends num, U> on A, B implements C, D {
+  T f;
+  U get g => 0;
+  set s(int v) {}
+  int m(double v) => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @17
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @28
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @39
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+      mixins
+        mixin M @51
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @53
+              bound: num
+              defaultType: num
+            covariant U @68
+              defaultType: dynamic
+          superclassConstraints
+            A
+            B
+          interfaces
+            C
+            D
+          fields
+            f @101
+              reference: <testLibraryFragment>::@mixin::M::@field::f
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: T
+            synthetic g @-1
+              reference: <testLibraryFragment>::@mixin::M::@field::g
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: U
+            synthetic s @-1
+              reference: <testLibraryFragment>::@mixin::M::@field::s
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@mixin::M::@getter::f
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              returnType: T
+            synthetic set f= @-1
+              reference: <testLibraryFragment>::@mixin::M::@setter::f
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              parameters
+                requiredPositional _f @-1
+                  type: T
+              returnType: void
+            get g @112
+              reference: <testLibraryFragment>::@mixin::M::@getter::g
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              returnType: U
+            set s= @126
+              reference: <testLibraryFragment>::@mixin::M::@setter::s
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              parameters
+                requiredPositional v @132
+                  type: int
+              returnType: void
+          methods
+            m @144
+              reference: <testLibraryFragment>::@mixin::M::@method::m
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              parameters
+                requiredPositional v @153
+                  type: double
+              returnType: int
+''');
+  }
+
+  test_mixin_base() async {
+    var library = await buildLibrary(r'''
+base mixin M on A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        base mixin M @11
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_mixin_field_inferredType_final() async {
+    var library = await buildLibrary('''
+mixin M {
+  final x = 0;
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@mixin::M::@field::x
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int
+              shouldUseTypeForInitializerInference: false
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@mixin::M::@getter::x
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              returnType: int
+''');
+  }
+
+  test_mixin_first() async {
+    var library = await buildLibrary(r'''
+mixin M {}
+''');
+
+    // We intentionally ask `mixins` directly, to check that we can ask them
+    // separately, without asking classes.
+    var mixins = library.definingCompilationUnit.mixins;
+    expect(mixins, hasLength(1));
+    expect(mixins[0].name, 'M');
+  }
+
+  test_mixin_getter_invokesSuperSelf_getter() async {
+    var library = await buildLibrary(r'''
+mixin M on A {
+  int get foo {
+    super.foo;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@mixin::M::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int
+          accessors
+            get foo @25 invokesSuperSelf
+              reference: <testLibraryFragment>::@mixin::M::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              returnType: int
+''');
+  }
+
+  test_mixin_getter_invokesSuperSelf_getter_nestedInAssignment() async {
+    var library = await buildLibrary(r'''
+mixin M on A {
+  int get foo {
+    (super.foo).foo = 0;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@mixin::M::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int
+          accessors
+            get foo @25 invokesSuperSelf
+              reference: <testLibraryFragment>::@mixin::M::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              returnType: int
+''');
+  }
+
+  test_mixin_getter_invokesSuperSelf_setter() async {
+    var library = await buildLibrary(r'''
+mixin M on A {
+  int get foo {
+    super.foo = 0;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@mixin::M::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int
+          accessors
+            get foo @25
+              reference: <testLibraryFragment>::@mixin::M::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              returnType: int
+''');
+  }
+
+  test_mixin_implicitObjectSuperclassConstraint() async {
+    var library = await buildLibrary(r'''
+mixin M {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_mixin_inference() async {
+    var library = await buildLibrary(r'''
+class A<T> {}
+mixin M<U> on A<U> {}
+class B extends A<int> with M {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @42
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A<int>
+          mixins
+            M<int>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: int}
+      mixins
+        mixin M @20
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U @22
+              defaultType: dynamic
+          superclassConstraints
+            A<U>
+''');
+  }
+
+  test_mixin_inference_classAlias_oneMixin() async {
+    // In the code below, B's superclass constraints don't include A, because
+    // superclass constraints are determined from the mixin's superclass, and
+    // B's superclass is Object.  So no mixin type inference is attempted, and
+    // "with B" is interpreted as "with B<dynamic>".
+    var library = await buildLibrary(r'''
+class A<T> {}
+class B<T> = Object with A<T>;
+class C = A<int> with B;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class alias B @20
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @22
+              defaultType: dynamic
+          supertype: Object
+          mixins
+            A<T>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+        class alias C @51
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: A<int>
+          mixins
+            B<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: int}
+''');
+  }
+
+  test_mixin_inference_classAlias_twoMixins() async {
+    // In the code below, `B` has a single superclass constraint, A1, because
+    // superclass constraints are determined from the mixin's superclass, and
+    // B's superclass is "Object with A1<T>".  So mixin type inference succeeds
+    // (since C's base class implements A1<int>), and "with B" is interpreted as
+    // "with B<int>".
+    var library = await buildLibrary(r'''
+class A1<T> {}
+class A2<T> {}
+class B<T> = Object with A1<T>, A2<T>;
+class Base implements A1<int> {}
+class C = Base with B;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A1 @6
+          reference: <testLibraryFragment>::@class::A1
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @9
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A1
+        class A2 @21
+          reference: <testLibraryFragment>::@class::A2
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @24
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A2::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A2
+        class alias B @36
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @38
+              defaultType: dynamic
+          supertype: Object
+          mixins
+            A1<T>
+            A2<T>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+        class Base @75
+          reference: <testLibraryFragment>::@class::Base
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            A1<int>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::Base::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::Base
+        class alias C @108
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: Base
+          mixins
+            B<int>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::Base::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::Base::@constructor::new
+''');
+  }
+
+  test_mixin_inference_nested_functionType() async {
+    var library = await buildLibrary(r'''
+class A<T> {}
+mixin M<T, U> on A<T Function(U)> {}
+class C extends A<int Function(String)> with M {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class C @57
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: A<int Function(String)>
+          mixins
+            M<int, String>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: int Function(String)}
+      mixins
+        mixin M @20
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @22
+              defaultType: dynamic
+            covariant U @25
+              defaultType: dynamic
+          superclassConstraints
+            A<T Function(U)>
+''');
+  }
+
+  test_mixin_inference_nested_interfaceType() async {
+    var library = await buildLibrary(r'''
+abstract class A<T> {}
+mixin M<T> on A<List<T>> {}
+class C extends A<List<int>> with M {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class A @15
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @17
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class C @57
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: A<List<int>>
+          mixins
+            M<int>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: List<int>}
+      mixins
+        mixin M @29
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @31
+              defaultType: dynamic
+          superclassConstraints
+            A<List<T>>
+''');
+  }
+
+  test_mixin_inference_twoMixins() async {
+    // Both `M1` and `M2` have their type arguments inferred.
+    var library = await buildLibrary(r'''
+class I<X> {}
+mixin M1<T> on I<T> {}
+mixin M2<T> on I<T> {}
+class A = I<int> with M1, M2;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I @6
+          reference: <testLibraryFragment>::@class::I
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant X @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I
+        class alias A @66
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          supertype: I<int>
+          mixins
+            M1<int>
+            M2<int>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::I::@constructor::new
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::I::@constructor::new
+                substitution: {X: int}
+      mixins
+        mixin M1 @20
+          reference: <testLibraryFragment>::@mixin::M1
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @23
+              defaultType: dynamic
+          superclassConstraints
+            I<T>
+        mixin M2 @43
+          reference: <testLibraryFragment>::@mixin::M2
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @46
+              defaultType: dynamic
+          superclassConstraints
+            I<T>
+''');
+  }
+
+  test_mixin_inference_viaTypeAlias() async {
+    var library = await buildLibrary(r'''
+mixin M<T, U> on S<T> {}
+
+typedef M2<T2> = M<T2, int>;
+
+class S<T3> {}
+
+class X extends S<String> with M2 {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class S @62
+          reference: <testLibraryFragment>::@class::S
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T3 @64
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::S::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::S
+        class X @78
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          supertype: S<String>
+          mixins
+            M<String, int>
+              alias: <testLibraryFragment>::@typeAlias::M2
+                typeArguments
+                  String
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::S::@constructor::new
+                substitution: {T3: String}
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          superclassConstraints
+            S<T>
+      typeAliases
+        M2 @34
+          reference: <testLibraryFragment>::@typeAlias::M2
+          typeParameters
+            covariant T2 @37
+              defaultType: dynamic
+          aliasedType: M<T2, int>
+''');
+  }
+
+  test_mixin_inference_viaTypeAlias2() async {
+    var library = await buildLibrary(r'''
+mixin M<T, U> on S<T> {}
+
+typedef M2<T2> = M<T2, int>;
+
+typedef M3<T3> = M2<T3>;
+
+class S<T4> {}
+
+class X extends S<String> with M3 {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class S @88
+          reference: <testLibraryFragment>::@class::S
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T4 @90
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::S::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::S
+        class X @104
+          reference: <testLibraryFragment>::@class::X
+          enclosingElement: <testLibraryFragment>
+          supertype: S<String>
+          mixins
+            M<String, int>
+              alias: <testLibraryFragment>::@typeAlias::M3
+                typeArguments
+                  String
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::S::@constructor::new
+                substitution: {T4: String}
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          superclassConstraints
+            S<T>
+      typeAliases
+        M2 @34
+          reference: <testLibraryFragment>::@typeAlias::M2
+          typeParameters
+            covariant T2 @37
+              defaultType: dynamic
+          aliasedType: M<T2, int>
+        M3 @64
+          reference: <testLibraryFragment>::@typeAlias::M3
+          typeParameters
+            covariant T3 @67
+              defaultType: dynamic
+          aliasedType: M<T3, int>
+            alias: <testLibraryFragment>::@typeAlias::M2
+              typeArguments
+                T3
+''');
+  }
+
+  test_mixin_interfaces_extensionType() async {
+    var library = await buildLibrary(r'''
+class A {}
+extension type B(int it) {}
+class C {}
+mixin M implements A, B, C {}
+''');
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+        class C @45
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+      extensionTypes
+        B @26
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: int
+          fields
+            final it @32
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: int
+      mixins
+        mixin M @56
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          interfaces
+            A
+            C
+''');
+  }
+
+  test_mixin_method_invokesSuperSelf() async {
+    var library = await buildLibrary(r'''
+mixin M on A {
+  void foo() {
+    super.foo();
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          methods
+            foo @22 invokesSuperSelf
+              reference: <testLibraryFragment>::@mixin::M::@method::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              returnType: void
+''');
+  }
+
+  test_mixin_method_namedAsConstraint() async {
+    var library = await buildLibrary(r'''
+class A {}
+mixin B on A {
+  void A() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      mixins
+        mixin B @17
+          reference: <testLibraryFragment>::@mixin::B
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            A
+          methods
+            A @33
+              reference: <testLibraryFragment>::@mixin::B::@method::A
+              enclosingElement: <testLibraryFragment>::@mixin::B
+              returnType: void
+''');
+  }
+
+  test_mixin_setter_invokesSuperSelf_getter() async {
+    var library = await buildLibrary(r'''
+mixin M on A {
+  set foo(int _) {
+    super.foo;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@mixin::M::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int
+          accessors
+            set foo= @21
+              reference: <testLibraryFragment>::@mixin::M::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              parameters
+                requiredPositional _ @29
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_mixin_setter_invokesSuperSelf_setter() async {
+    var library = await buildLibrary(r'''
+mixin M on A {
+  set foo(int _) {
+    super.foo = 0;
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@mixin::M::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int
+          accessors
+            set foo= @21 invokesSuperSelf
+              reference: <testLibraryFragment>::@mixin::M::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              parameters
+                requiredPositional _ @29
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_mixin_superclassConstraints_extensionType() async {
+    var library = await buildLibrary(r'''
+class A {}
+extension type B(int it) {}
+class C {}
+mixin M on A, B, C {}
+''');
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+        class C @45
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+      extensionTypes
+        B @26
+          reference: <testLibraryFragment>::@extensionType::B
+          enclosingElement: <testLibraryFragment>
+          representation: <testLibraryFragment>::@extensionType::B::@field::it
+          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
+          typeErasure: int
+          fields
+            final it @32
+              reference: <testLibraryFragment>::@extensionType::B::@field::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              type: int
+          accessors
+            synthetic get it @-1
+              reference: <testLibraryFragment>::@extensionType::B::@getter::it
+              enclosingElement: <testLibraryFragment>::@extensionType::B
+              returnType: int
+      mixins
+        mixin M @56
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            A
+            C
+''');
+  }
+
+  test_mixin_typeParameters_variance_contravariant() async {
+    var library = await buildLibrary('mixin M<in T> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            contravariant T @11
+              defaultType: dynamic
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_mixin_typeParameters_variance_covariant() async {
+    var library = await buildLibrary('mixin M<out T> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @12
+              defaultType: dynamic
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_mixin_typeParameters_variance_invariant() async {
+    var library = await buildLibrary('mixin M<inout T> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            invariant T @14
+              defaultType: dynamic
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_mixin_typeParameters_variance_multiple() async {
+    var library = await buildLibrary('mixin M<inout T, in U, out V> {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            invariant T @14
+              defaultType: dynamic
+            contravariant U @20
+              defaultType: dynamic
+            covariant V @27
+              defaultType: dynamic
+          superclassConstraints
+            Object
+''');
+  }
+}
+
+abstract class MixinElementTest_augmentation extends ElementsBaseTest {
+  test_allSupertypes() async {
+    var library = await buildLibrary(r'''
+mixin M {}
+class A with M {}
+''');
+
+    configuration
+      ..withAllSupertypes = true
+      ..withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @17
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M
+          allSupertypes
+            M
+            Object
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          allSupertypes
+            Object
+''');
+  }
+
+  test_allSupertypes_hasSuperclassConstraints() async {
+    var library = await buildLibrary(r'''
+class A {}
+mixin M on A {}
+class B with M {}
+''');
+
+    configuration
+      ..withAllSupertypes = true
+      ..withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          allSupertypes
+            Object
+        class B @33
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M
+          allSupertypes
+            A
+            M
+            Object
+      mixins
+        mixin M @17
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            A
+          allSupertypes
+            A
+            Object
+''');
+  }
+
+  test_augmentationTarget() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment mixin A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment mixin A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {}
+''');
+
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          augmented
+            superclassConstraints
+              Object
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @68
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      mixins
+        augment mixin A @40
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+  exportedReferences
+    declared <testLibraryFragment>::@mixin::A
+  exportNamespace
+    A: <testLibraryFragment>::@mixin::A
+''');
+  }
+
+  test_augmentationTarget_augmentationThenDeclaration() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment class A {
+  void foo1() {}
+}
+
+class A {
+  void foo2() {}
+}
+
+augment class A {
+  void foo3() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
+          methods
+            foo1 @55
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
+              returnType: void
+        class A @74
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          methods
+            foo2 @85
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
+              returnType: void
+          augmented
+            constructors
+              <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
+              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
+        augment class A @112
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          methods
+            foo3 @123
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
+              returnType: void
+''');
+  }
+
+  test_augmentationTarget_no2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment mixin A {
+  void foo1() {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment mixin A {
+  void foo2() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin B {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin B @31
+          reference: <testLibraryFragment>::@mixin::B
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @68
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          methods
+            foo1 @79
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: void
+          augmented
+            superclassConstraints
+              Object
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::foo1
+              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@method::foo2
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      mixins
+        augment mixin A @40
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          methods
+            foo2 @51
+              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@method::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmented_field_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            foo @41
+              reference: <testLibraryFragment>::@mixin::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibraryFragment>::@mixin::A::@getter::foo
+              <testLibraryFragment>::@mixin::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int foo = 1;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+mixin A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @56
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            foo @66
+              reference: <testLibraryFragment>::@mixin::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibraryFragment>::@mixin::A::@getter::foo
+              <testLibraryFragment>::@mixin::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_2
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+''');
+  }
+
+  test_augmented_field_augment_field_afterGetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int get foo => 1;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+mixin A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @56
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            foo @66
+              reference: <testLibraryFragment>::@mixin::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@mixin::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_afterSetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment set foo(int _) {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int foo = 2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+mixin A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @56
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            foo @66
+              reference: <testLibraryFragment>::@mixin::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibraryFragment>::@mixin::A::@getter::foo
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          accessors
+            augment set foo= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              parameters
+                requiredPositional _ @69
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@setter::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
+''');
+  }
+
+  test_augmented_field_augment_field_differentTypes() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment double foo = 1.2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            foo @41
+              reference: <testLibraryFragment>::@mixin::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibraryFragment>::@mixin::A::@getter::foo
+              <testLibraryFragment>::@mixin::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          fields
+            augment foo @64
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              type: double
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
+''');
+  }
+
+  /// This is not allowed by the specification, but allowed syntactically,
+  /// so we need a way to handle it.
+  test_augmented_field_augment_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int foo = 1;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  int get foo => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@mixin::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              id: field_0
+              getter: getter_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+          accessors
+            get foo @45
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+            accessors
+              <testLibraryFragment>::@mixin::A::@getter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          fields
+            augment foo @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
+''');
+  }
+
+  test_augmented_fields_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  int foo2 = 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  int foo1 = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            foo1 @41
+              reference: <testLibraryFragment>::@mixin::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          accessors
+            synthetic get foo1 @-1
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo1= @-1
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _foo1 @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibraryFragment>::@mixin::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
+            accessors
+              <testLibraryFragment>::@mixin::A::@getter::foo1
+              <testLibraryFragment>::@mixin::A::@setter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          fields
+            foo2 @53
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_1
+              getter: getter_1
+              setter: setter_1
+          accessors
+            synthetic get foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+            synthetic set foo2= @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              parameters
+                requiredPositional _foo2 @-1
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_fields_add_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A<T2> {
+  T2 foo2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A<T1> {
+  T1 foo1;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            foo1 @44
+              reference: <testLibraryFragment>::@mixin::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: T1
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          accessors
+            synthetic get foo1 @-1
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: T1
+              id: getter_0
+              variable: field_0
+            synthetic set foo1= @-1
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _foo1 @-1
+                  type: T1
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibraryFragment>::@mixin::A::@field::foo1
+              FieldMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
+                augmentationSubstitution: {T2: T1}
+            accessors
+              <testLibraryFragment>::@mixin::A::@getter::foo1
+              <testLibraryFragment>::@mixin::A::@setter::foo1
+              PropertyAccessorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
+                augmentationSubstitution: {T2: T1}
+              PropertyAccessorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
+                augmentationSubstitution: {T2: T1}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          fields
+            foo2 @56
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              type: T2
+              id: field_1
+              getter: getter_1
+              setter: setter_1
+          accessors
+            synthetic get foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: T2
+              id: getter_1
+              variable: field_1
+            synthetic set foo2= @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              parameters
+                requiredPositional _foo2 @-1
+                  type: T2
+              returnType: void
+              id: setter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_getters_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  int get foo2 => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  int get foo1 => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@mixin::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              id: field_0
+              getter: getter_0
+          accessors
+            get foo1 @45
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibraryFragment>::@mixin::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
+            accessors
+              <testLibraryFragment>::@mixin::A::@getter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              type: int
+              id: field_1
+              getter: getter_1
+          accessors
+            get foo2 @57
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_getters_add_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A<T2> {
+  T2 get foo2;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A<T1> {
+  T1 get foo1;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T1 @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@mixin::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: T1
+              id: field_0
+              getter: getter_0
+          accessors
+            abstract get foo1 @48
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: T1
+              id: getter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibraryFragment>::@mixin::A::@field::foo1
+              FieldMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
+                augmentationSubstitution: {T2: T1}
+            accessors
+              <testLibraryFragment>::@mixin::A::@getter::foo1
+              PropertyAccessorMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
+                augmentationSubstitution: {T2: T1}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              type: T2
+              id: field_1
+              getter: getter_1
+          accessors
+            abstract get foo2 @60
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: T2
+              id: getter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_getters_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            foo @41
+              reference: <testLibraryFragment>::@mixin::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibraryFragment>::@mixin::A::@field::foo
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@mixin::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo
+''');
+  }
+
+  test_augmented_getters_augment_field2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int get foo => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+mixin A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @56
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            foo @66
+              reference: <testLibraryFragment>::@mixin::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibraryFragment>::@mixin::A::@field::foo
+            accessors
+              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
+              <testLibraryFragment>::@mixin::A::@setter::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_0
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+''');
+  }
+
+  test_augmented_getters_augment_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int get foo1 => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  int get foo1 => 0;
+  int get foo2 => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@mixin::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              id: field_0
+              getter: getter_0
+            synthetic foo2 @-1
+              reference: <testLibraryFragment>::@mixin::A::@field::foo2
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              id: field_1
+              getter: getter_1
+          accessors
+            get foo1 @45
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo1
+            get foo2 @66
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo2
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_1
+              variable: field_1
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibraryFragment>::@mixin::A::@field::foo1
+              <testLibraryFragment>::@mixin::A::@field::foo2
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo1
+              <testLibraryFragment>::@mixin::A::@getter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          accessors
+            augment get foo1 @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo1
+''');
+  }
+
+  test_augmented_getters_augment_getter2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int get foo => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment int get foo => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+mixin A {
+  int get foo => 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @56
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@mixin::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              id: field_0
+              getter: getter_0
+          accessors
+            get foo @70
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibraryFragment>::@mixin::A::@field::foo
+            accessors
+              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: int
+              id: getter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          accessors
+            augment get foo @65
+              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+              returnType: int
+              id: getter_2
+              variable: field_0
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
+''');
+  }
+
+  test_augmented_interfaces() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A implements I2 {}
+class I2 {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A implements I1 {}
+class I1 {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I1 @56
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          interfaces
+            I1
+          augmented
+            superclassConstraints
+              Object
+            interfaces
+              I1
+              I2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class I2 @68
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          interfaces
+            I2
+''');
+  }
+
+  test_augmented_interfaces_chain() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment mixin A implements I2 {}
+class I2 {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment mixin A implements I3 {}
+class I3 {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A implements I1 {}
+class I1 {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I1 @56
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          interfaces
+            I1
+          augmented
+            superclassConstraints
+              Object
+            interfaces
+              I1
+              I2
+              I3
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class I2 @93
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+      mixins
+        augment mixin A @68
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          interfaces
+            I2
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        class I3 @65
+          reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::I3
+      mixins
+        augment mixin A @40
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          interfaces
+            I3
+''');
+  }
+
+  test_augmented_methods() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  void bar() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@mixin::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: void
+          augmented
+            superclassConstraints
+              Object
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar
+              <testLibraryFragment>::@mixin::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          methods
+            bar @54
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: void
+''');
+  }
+
+  test_augmented_methods_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment void foo1() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  void foo1() {}
+  void foo2() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          methods
+            foo1 @42
+              reference: <testLibraryFragment>::@mixin::A::@method::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo1
+            foo2 @59
+              reference: <testLibraryFragment>::@mixin::A::@method::foo2
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: void
+          augmented
+            superclassConstraints
+              Object
+            methods
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo1
+              <testLibraryFragment>::@mixin::A::@method::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          methods
+            augment foo1 @62
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo1
+''');
+  }
+
+  test_augmented_methods_augment2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment mixin A {
+  augment void foo() {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment mixin A {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  void foo() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@mixin::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
+          augmented
+            superclassConstraints
+              Object
+            methods
+              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @68
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          methods
+            augment foo @87
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      mixins
+        augment mixin A @40
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          methods
+            augment foo @59
+              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
+''');
+  }
+
+  test_augmented_methods_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A<T2> {
+  T2 bar() => throw 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A<T> {
+  T foo() => throw 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@mixin::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: T
+          augmented
+            superclassConstraints
+              Object
+            methods
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar
+                augmentationSubstitution: {T2: T}
+              <testLibraryFragment>::@mixin::A::@method::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          methods
+            bar @56
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: T2
+''');
+  }
+
+  test_augmented_methods_generic_augment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A<T2> {
+  augment T2 foo() => throw 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A<T> {
+  T foo() => throw 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@mixin::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: T
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
+          augmented
+            superclassConstraints
+              Object
+            methods
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
+                augmentationSubstitution: {T2: T}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          methods
+            augment foo @64
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: T2
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo
+''');
+  }
+
+  test_augmented_methods_typeParameterCountMismatch() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A<T> {
+  augment void foo() {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  void foo() {}
+  void bar() {}
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          methods
+            foo @42
+              reference: <testLibraryFragment>::@mixin::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: void
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
+            bar @58
+              reference: <testLibraryFragment>::@mixin::A::@method::bar
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: void
+          augmented
+            superclassConstraints
+              Object
+            methods
+              <testLibraryFragment>::@mixin::A::@method::bar
+              MethodMember
+                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
+                augmentationSubstitution: {T: InvalidType}
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          methods
+            augment foo @65
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              returnType: void
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo
+''');
+  }
+
+  test_augmented_setters_add() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  set foo2(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  set foo1(int _) {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@mixin::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              id: field_0
+              setter: setter_0
+          accessors
+            set foo1= @41
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _ @50
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibraryFragment>::@mixin::A::@field::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
+            accessors
+              <testLibraryFragment>::@mixin::A::@setter::foo1
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          fields
+            synthetic foo2 @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              type: int
+              id: field_1
+              setter: setter_1
+          accessors
+            set foo2= @53
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              parameters
+                requiredPositional _ @62
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+''');
+  }
+
+  test_augmented_setters_augment_field() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment set foo(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  int foo = 0;
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            foo @41
+              reference: <testLibraryFragment>::@mixin::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+              id: field_0
+              getter: getter_0
+              setter: setter_0
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@mixin::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              returnType: int
+              id: getter_0
+              variable: field_0
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibraryFragment>::@mixin::A::@field::foo
+            accessors
+              <testLibraryFragment>::@mixin::A::@getter::foo
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          accessors
+            augment set foo= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              parameters
+                requiredPositional _ @69
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@setter::foo
+''');
+  }
+
+  test_augmented_setters_augment_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A {
+  augment set foo1(int _) {}
+}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {
+  set foo1(int _) {}
+  set foo2(int _) {}
+}
+''');
+
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          fields
+            synthetic foo1 @-1
+              reference: <testLibraryFragment>::@mixin::A::@field::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              id: field_0
+              setter: setter_0
+            synthetic foo2 @-1
+              reference: <testLibraryFragment>::@mixin::A::@field::foo2
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              type: int
+              id: field_1
+              setter: setter_1
+          accessors
+            set foo1= @41
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo1
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _ @50
+                  type: int
+              returnType: void
+              id: setter_0
+              variable: field_0
+              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1
+            set foo2= @62
+              reference: <testLibraryFragment>::@mixin::A::@setter::foo2
+              enclosingElement: <testLibraryFragment>::@mixin::A
+              parameters
+                requiredPositional _ @71
+                  type: int
+              returnType: void
+              id: setter_1
+              variable: field_1
+          augmented
+            superclassConstraints
+              Object
+            fields
+              <testLibraryFragment>::@mixin::A::@field::foo1
+              <testLibraryFragment>::@mixin::A::@field::foo2
+            accessors
+              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1
+              <testLibraryFragment>::@mixin::A::@setter::foo2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          accessors
+            augment set foo1= @61
+              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+              parameters
+                requiredPositional _ @70
+                  type: int
+              returnType: void
+              id: setter_2
+              variable: field_0
+              augmentationTarget: <testLibraryFragment>::@mixin::A::@setter::foo1
+''');
+  }
+
+  test_augmented_superclassConstraints() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A on B2 {}
+class B2 {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A on B1 {}
+class B1 {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B1 @48
+          reference: <testLibraryFragment>::@class::B1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B1
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            B1
+          augmented
+            superclassConstraints
+              B1
+              B2
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class B2 @60
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B2
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          superclassConstraints
+            B2
+''');
+  }
+
+  test_augmented_superclassConstraints_chain() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+import augment 'b.dart';
+augment mixin A on I2 {}
+class I2 {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'a.dart';
+augment mixin A on I3 {}
+class I3 {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A on I1 {}
+class I1 {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+      augmentationImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+          reference: <testLibrary>::@augmentation::package:test/b.dart
+          definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I1 @48
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            I1
+          augmented
+            superclassConstraints
+              I1
+              I2
+              I3
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class I2 @85
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+      mixins
+        augment mixin A @68
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          superclassConstraints
+            I2
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        class I3 @57
+          reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::I3
+      mixins
+        augment mixin A @40
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            I3
+''');
+  }
+
+  test_augmented_superclassConstraints_fromAugmentation() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A on B {}
+class B {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          augmented
+            superclassConstraints
+              B
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class B @59
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          superclassConstraints
+            B
+''');
+  }
+
+  test_augmented_superclassConstraints_generic() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A<T2> on I2<T2> {}
+class I2<E> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A<T> on I1 {}
+class I1 {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I1 @51
+          reference: <testLibraryFragment>::@class::I1
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I1
+      mixins
+        mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            I1
+          augmented
+            superclassConstraints
+              I1
+              I2<T>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class I2 @68
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant E @71
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T2 @45
+              defaultType: dynamic
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+          superclassConstraints
+            I2<T2>
+''');
+  }
+
+  test_augmentedBy_class2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+
+mixin A {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @57
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTargetAny: <testLibraryFragment>::@mixin::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTargetAny: <testLibraryFragment>::@mixin::A
+''');
+  }
+
+  test_augmentedBy_class_mixin() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment class A {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+
+augment mixin A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+import augment 'b.dart';
+
+mixin A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin A @57
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          augmented
+            superclassConstraints
+              Object
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      classes
+        augment class A @44
+          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTargetAny: <testLibraryFragment>::@mixin::A
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @44
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+''');
+  }
+
+  test_inferTypes_method_ofAugment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  int foo(String a) => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment mixin B {
+  foo(a) => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+import augment 'b.dart';
+
+mixin B on A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      mixins
+        mixin B @49
+          reference: <testLibraryFragment>::@mixin::B
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
+          superclassConstraints
+            A
+          augmented
+            superclassConstraints
+              A
+            methods
+              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@method::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin B @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::B
+          methods
+            foo @49
+              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@method::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
+              parameters
+                requiredPositional a @53
+                  type: String
+              returnType: int
+''');
+  }
+
+  test_inferTypes_method_usingAugmentation_interface() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  int foo(String a) => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+augment mixin B implements A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+
+mixin B {
+  foo(a) => 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin B @32
+          reference: <testLibraryFragment>::@mixin::B
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
+          superclassConstraints
+            Object
+          methods
+            foo @38
+              reference: <testLibraryFragment>::@mixin::B::@method::foo
+              enclosingElement: <testLibraryFragment>::@mixin::B
+              parameters
+                requiredPositional a @42
+                  type: String
+              returnType: int
+          augmented
+            superclassConstraints
+              Object
+            interfaces
+              A
+            methods
+              <testLibraryFragment>::@mixin::B::@method::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      mixins
+        augment mixin B @60
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::B
+          interfaces
+            A
+''');
+  }
+
+  test_inferTypes_method_usingAugmentation_superclassConstraint() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  int foo(String a) => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+import 'a.dart';
+augment mixin B on A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'b.dart';
+
+mixin B {
+  foo(a) => 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin B @32
+          reference: <testLibraryFragment>::@mixin::B
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
+          methods
+            foo @38
+              reference: <testLibraryFragment>::@mixin::B::@method::foo
+              enclosingElement: <testLibraryFragment>::@mixin::B
+              parameters
+                requiredPositional a @42
+                  type: String
+              returnType: int
+          augmented
+            superclassConstraints
+              A
+            methods
+              <testLibraryFragment>::@mixin::B::@method::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+      mixins
+        augment mixin B @60
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::B
+          superclassConstraints
+            A
+''');
+  }
+
+  test_inferTypes_method_withAugment() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {
+  int foo(String a) => 0;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+augment library 'test.dart';
+augment mixin B {
+  augment foo(a) => 0;
+}
+''');
+
+    var library = await buildLibrary(r'''
+import 'a.dart';
+import augment 'b.dart';
+
+mixin B on A {
+  foo(a) => 0;
+}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/b.dart
+      definingUnit: <testLibrary>::@fragment::package:test/b.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      mixins
+        mixin B @49
+          reference: <testLibraryFragment>::@mixin::B
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
+          superclassConstraints
+            A
+          methods
+            foo @60
+              reference: <testLibraryFragment>::@mixin::B::@method::foo
+              enclosingElement: <testLibraryFragment>::@mixin::B
+              parameters
+                requiredPositional a @64
+                  type: String
+              returnType: int
+              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo
+          augmented
+            superclassConstraints
+              A
+            methods
+              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin B @43
+          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::B
+          methods
+            augment foo @57
+              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo
+              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
+              parameters
+                requiredPositional a @61
+                  type: String
+              returnType: int
+              augmentationTarget: <testLibraryFragment>::@mixin::B::@method::foo
+''');
+  }
+
+  test_modifiers_base() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment base mixin A {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+base mixin A {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        base mixin A @36
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          augmented
+            superclassConstraints
+              Object
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment base mixin A @48
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+''');
+  }
+
+  test_notAugmented_interfaces() async {
+    var library = await buildLibrary(r'''
+mixin A implements I {}
+class I {}
+''');
+
+    configuration.withAugmentedWithoutAugmentation = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class I @30
+          reference: <testLibraryFragment>::@class::I
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::I::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::I
+          augmented
+      mixins
+        mixin A @6
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          interfaces
+            I
+          augmented
+            superclassConstraints
+              Object
+            interfaces
+              I
+''');
+  }
+
+  test_notAugmented_superclassConstraints() async {
+    var library = await buildLibrary(r'''
+mixin A on B {}
+class B {}
+''');
+
+    configuration.withAugmentedWithoutAugmentation = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class B @22
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+          augmented
+      mixins
+        mixin A @6
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            B
+          augmented
+            superclassConstraints
+              B
+''');
+  }
+
+  test_notSimplyBounded_self() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment mixin A<T extends A> {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+mixin A<T extends A> {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        notSimplyBounded mixin A @31
+          reference: <testLibraryFragment>::@mixin::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @33
+              bound: A<dynamic>
+              defaultType: dynamic
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          superclassConstraints
+            Object
+          augmented
+            superclassConstraints
+              Object
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      mixins
+        augment mixin A @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          typeParameters
+            covariant T @45
+              bound: A<dynamic>
+              defaultType: A<dynamic>
+          augmentationTarget: <testLibraryFragment>::@mixin::A
+''');
+  }
+}
+
+@reflectiveTest
+class MixinElementTest_augmentation_fromBytes
+    extends MixinElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class MixinElementTest_augmentation_keepLinking
+    extends MixinElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+@reflectiveTest
+class MixinElementTest_fromBytes extends MixinElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class MixinElementTest_keepLinking extends MixinElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/non_synthetic_test.dart b/pkg/analyzer/test/src/summary/elements/non_synthetic_test.dart
new file mode 100644
index 0000000..4023faa
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/non_synthetic_test.dart
@@ -0,0 +1,508 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(NonSyntheticElementTest_keepLinking);
+    defineReflectiveTests(NonSyntheticElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class NonSyntheticElementTest extends ElementsBaseTest {
+  test_nonSynthetic_class_field() async {
+    var library = await buildLibrary(r'''
+class C {
+  int foo = 0;
+}
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            foo @16
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              shouldUseTypeForInitializerInference: true
+              nonSynthetic: <testLibraryFragment>::@class::C::@field::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              nonSynthetic: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::C::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+              nonSynthetic: <testLibraryFragment>::@class::C::@field::foo
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+                  nonSynthetic: <testLibraryFragment>::@class::C::@field::foo
+              returnType: void
+              nonSynthetic: <testLibraryFragment>::@class::C::@field::foo
+''');
+  }
+
+  test_nonSynthetic_class_getter() async {
+    var library = await buildLibrary(r'''
+class C {
+  int get foo => 0;
+}
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              nonSynthetic: <testLibraryFragment>::@class::C::@getter::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              nonSynthetic: <testLibraryFragment>::@class::C
+          accessors
+            get foo @20
+              reference: <testLibraryFragment>::@class::C::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+              nonSynthetic: <testLibraryFragment>::@class::C::@getter::foo
+''');
+  }
+
+  test_nonSynthetic_class_setter() async {
+    var library = await buildLibrary(r'''
+class C {
+  set foo(int value) {}
+}
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::C::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+              nonSynthetic: <testLibraryFragment>::@class::C::@setter::foo
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              nonSynthetic: <testLibraryFragment>::@class::C
+          accessors
+            set foo= @16
+              reference: <testLibraryFragment>::@class::C::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @24
+                  type: int
+                  nonSynthetic: <testLibraryFragment>::@class::C::@setter::foo::@parameter::value
+              returnType: void
+              nonSynthetic: <testLibraryFragment>::@class::C::@setter::foo
+''');
+  }
+
+  test_nonSynthetic_enum() async {
+    var library = await buildLibrary(r'''
+enum E {
+  a, b
+}
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant a @11
+              reference: <testLibraryFragment>::@enum::E::@field::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+              nonSynthetic: <testLibraryFragment>::@enum::E::@field::a
+            static const enumConstant b @14
+              reference: <testLibraryFragment>::@enum::E::@field::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+              nonSynthetic: <testLibraryFragment>::@enum::E::@field::b
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: a @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
+                      staticType: E
+                    SimpleIdentifier
+                      token: b @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+              nonSynthetic: <testLibraryFragment>::@enum::E
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+              nonSynthetic: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::a
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+              nonSynthetic: <testLibraryFragment>::@enum::E::@field::a
+            synthetic static get b @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::b
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+              nonSynthetic: <testLibraryFragment>::@enum::E::@field::b
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+              nonSynthetic: <testLibraryFragment>::@enum::E
+''');
+  }
+
+  test_nonSynthetic_mixin_field() async {
+    var library = await buildLibrary(r'''
+mixin M {
+  int foo = 0;
+}
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            foo @16
+              reference: <testLibraryFragment>::@mixin::M::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int
+              shouldUseTypeForInitializerInference: true
+              nonSynthetic: <testLibraryFragment>::@mixin::M::@field::foo
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@mixin::M::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              returnType: int
+              nonSynthetic: <testLibraryFragment>::@mixin::M::@field::foo
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@mixin::M::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+                  nonSynthetic: <testLibraryFragment>::@mixin::M::@field::foo
+              returnType: void
+              nonSynthetic: <testLibraryFragment>::@mixin::M::@field::foo
+''');
+  }
+
+  test_nonSynthetic_mixin_getter() async {
+    var library = await buildLibrary(r'''
+mixin M {
+  int get foo => 0;
+}
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@mixin::M::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int
+              nonSynthetic: <testLibraryFragment>::@mixin::M::@getter::foo
+          accessors
+            get foo @20
+              reference: <testLibraryFragment>::@mixin::M::@getter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              returnType: int
+              nonSynthetic: <testLibraryFragment>::@mixin::M::@getter::foo
+''');
+  }
+
+  test_nonSynthetic_mixin_setter() async {
+    var library = await buildLibrary(r'''
+mixin M {
+  set foo(int value) {}
+}
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@mixin::M::@field::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              type: int
+              nonSynthetic: <testLibraryFragment>::@mixin::M::@setter::foo
+          accessors
+            set foo= @16
+              reference: <testLibraryFragment>::@mixin::M::@setter::foo
+              enclosingElement: <testLibraryFragment>::@mixin::M
+              parameters
+                requiredPositional value @24
+                  type: int
+                  nonSynthetic: <testLibraryFragment>::@mixin::M::@setter::foo::@parameter::value
+              returnType: void
+              nonSynthetic: <testLibraryFragment>::@mixin::M::@setter::foo
+''');
+  }
+
+  test_nonSynthetic_unit_getter() async {
+    var library = await buildLibrary(r'''
+int get foo => 0;
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          nonSynthetic: <testLibraryFragment>::@getter::foo
+      accessors
+        static get foo @8
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          nonSynthetic: <testLibraryFragment>::@getter::foo
+''');
+  }
+
+  test_nonSynthetic_unit_getterSetter() async {
+    var library = await buildLibrary(r'''
+int get foo => 0;
+set foo(int value) {}
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          nonSynthetic: <testLibraryFragment>::@getter::foo
+      accessors
+        static get foo @8
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          nonSynthetic: <testLibraryFragment>::@getter::foo
+        static set foo= @22
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional value @30
+              type: int
+              nonSynthetic: <testLibraryFragment>::@setter::foo::@parameter::value
+          returnType: void
+          nonSynthetic: <testLibraryFragment>::@setter::foo
+''');
+  }
+
+  test_nonSynthetic_unit_setter() async {
+    var library = await buildLibrary(r'''
+set foo(int value) {}
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          nonSynthetic: <testLibraryFragment>::@setter::foo
+      accessors
+        static set foo= @4
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional value @12
+              type: int
+              nonSynthetic: <testLibraryFragment>::@setter::foo::@parameter::value
+          returnType: void
+          nonSynthetic: <testLibraryFragment>::@setter::foo
+''');
+  }
+
+  test_nonSynthetic_unit_variable() async {
+    var library = await buildLibrary(r'''
+int foo = 0;
+''');
+    configuration.withNonSynthetic = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static foo @4
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          nonSynthetic: <testLibraryFragment>::@topLevelVariable::foo
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          nonSynthetic: <testLibraryFragment>::@topLevelVariable::foo
+        synthetic static set foo= @-1
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _foo @-1
+              type: int
+              nonSynthetic: <testLibraryFragment>::@topLevelVariable::foo
+          returnType: void
+          nonSynthetic: <testLibraryFragment>::@topLevelVariable::foo
+''');
+  }
+}
+
+@reflectiveTest
+class NonSyntheticElementTest_fromBytes extends NonSyntheticElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class NonSyntheticElementTest_keepLinking extends NonSyntheticElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/offsets_test.dart b/pkg/analyzer/test/src/summary/elements/offsets_test.dart
new file mode 100644
index 0000000..67578f8
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/offsets_test.dart
@@ -0,0 +1,2491 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(OffsetsElementTest_keepLinking);
+    defineReflectiveTests(OffsetsElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class OffsetsElementTest extends ElementsBaseTest {
+  test_codeRange_class() async {
+    var library = await buildLibrary('''
+class Raw {}
+
+/// Comment 1.
+/// Comment 2.
+class HasDocComment {}
+
+@Object()
+class HasAnnotation {}
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+class AnnotationThenComment {}
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+class CommentThenAnnotation {}
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+class CommentAroundAnnotation {}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class Raw @6
+          reference: <testLibraryFragment>::@class::Raw
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 12
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::Raw::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::Raw
+        class HasDocComment @50
+          reference: <testLibraryFragment>::@class::HasDocComment
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          codeOffset: 14
+          codeLength: 52
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::HasDocComment::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::HasDocComment
+        class HasAnnotation @84
+          reference: <testLibraryFragment>::@class::HasAnnotation
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @68
+              name: SimpleIdentifier
+                token: Object @69
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @75
+                rightParenthesis: ) @76
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 68
+          codeLength: 32
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::HasAnnotation::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::HasAnnotation
+        class AnnotationThenComment @148
+          reference: <testLibraryFragment>::@class::AnnotationThenComment
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @102
+              name: SimpleIdentifier
+                token: Object @103
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @109
+                rightParenthesis: ) @110
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 102
+          codeLength: 70
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::AnnotationThenComment::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::AnnotationThenComment
+        class CommentThenAnnotation @220
+          reference: <testLibraryFragment>::@class::CommentThenAnnotation
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @204
+              name: SimpleIdentifier
+                token: Object @205
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @211
+                rightParenthesis: ) @212
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 174
+          codeLength: 70
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::CommentThenAnnotation::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::CommentThenAnnotation
+        class CommentAroundAnnotation @292
+          reference: <testLibraryFragment>::@class::CommentAroundAnnotation
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @261
+              name: SimpleIdentifier
+                token: Object @262
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @268
+                rightParenthesis: ) @269
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 261
+          codeLength: 57
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::CommentAroundAnnotation::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::CommentAroundAnnotation
+''');
+  }
+
+  test_codeRange_class_namedMixin() async {
+    var library = await buildLibrary('''
+class A {}
+
+class B {}
+
+class Raw = Object with A, B;
+
+/// Comment 1.
+/// Comment 2.
+class HasDocComment = Object with A, B;
+
+@Object()
+class HasAnnotation = Object with A, B;
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+class AnnotationThenComment = Object with A, B;
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+class CommentThenAnnotation = Object with A, B;
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+class CommentAroundAnnotation = Object with A, B;
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 10
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @18
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 12
+          codeLength: 10
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class alias Raw @30
+          reference: <testLibraryFragment>::@class::Raw
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 24
+          codeLength: 29
+          supertype: Object
+          mixins
+            A
+            B
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::Raw::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::Raw
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+        class alias HasDocComment @91
+          reference: <testLibraryFragment>::@class::HasDocComment
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          codeOffset: 55
+          codeLength: 69
+          supertype: Object
+          mixins
+            A
+            B
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::HasDocComment::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::HasDocComment
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+        class alias HasAnnotation @142
+          reference: <testLibraryFragment>::@class::HasAnnotation
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @126
+              name: SimpleIdentifier
+                token: Object @127
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @133
+                rightParenthesis: ) @134
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 126
+          codeLength: 49
+          supertype: Object
+          mixins
+            A
+            B
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::HasAnnotation::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::HasAnnotation
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+        class alias AnnotationThenComment @223
+          reference: <testLibraryFragment>::@class::AnnotationThenComment
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @177
+              name: SimpleIdentifier
+                token: Object @178
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @184
+                rightParenthesis: ) @185
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 177
+          codeLength: 87
+          supertype: Object
+          mixins
+            A
+            B
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::AnnotationThenComment::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::AnnotationThenComment
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+        class alias CommentThenAnnotation @312
+          reference: <testLibraryFragment>::@class::CommentThenAnnotation
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @296
+              name: SimpleIdentifier
+                token: Object @297
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @303
+                rightParenthesis: ) @304
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 266
+          codeLength: 87
+          supertype: Object
+          mixins
+            A
+            B
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::CommentThenAnnotation::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::CommentThenAnnotation
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+        class alias CommentAroundAnnotation @401
+          reference: <testLibraryFragment>::@class::CommentAroundAnnotation
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @370
+              name: SimpleIdentifier
+                token: Object @371
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @377
+                rightParenthesis: ) @378
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 370
+          codeLength: 74
+          supertype: Object
+          mixins
+            A
+            B
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@class::CommentAroundAnnotation::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::CommentAroundAnnotation
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
+''');
+  }
+
+  test_codeRange_constructor() async {
+    var library = await buildLibrary('''
+class C {
+  C();
+
+  C.raw() {}
+
+  /// Comment 1.
+  /// Comment 2.
+  C.hasDocComment() {}
+
+  @Object()
+  C.hasAnnotation() {}
+
+  @Object()
+  /// Comment 1.
+  /// Comment 2.
+  C.annotationThenComment() {}
+
+  /// Comment 1.
+  /// Comment 2.
+  @Object()
+  C.commentThenAnnotation() {}
+
+  /// Comment 1.
+  @Object()
+  /// Comment 2.
+  C.commentAroundAnnotation() {}
+}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 362
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              codeOffset: 12
+              codeLength: 4
+            raw @22
+              reference: <testLibraryFragment>::@class::C::@constructor::raw
+              enclosingElement: <testLibraryFragment>::@class::C
+              codeOffset: 20
+              codeLength: 10
+              periodOffset: 21
+              nameEnd: 25
+            hasDocComment @70
+              reference: <testLibraryFragment>::@class::C::@constructor::hasDocComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              codeOffset: 34
+              codeLength: 54
+              periodOffset: 69
+              nameEnd: 83
+            hasAnnotation @106
+              reference: <testLibraryFragment>::@class::C::@constructor::hasAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @92
+                  name: SimpleIdentifier
+                    token: Object @93
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @99
+                    rightParenthesis: ) @100
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 92
+              codeLength: 32
+              periodOffset: 105
+              nameEnd: 119
+            annotationThenComment @176
+              reference: <testLibraryFragment>::@class::C::@constructor::annotationThenComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @128
+                  name: SimpleIdentifier
+                    token: Object @129
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @135
+                    rightParenthesis: ) @136
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 128
+              codeLength: 74
+              periodOffset: 175
+              nameEnd: 197
+            commentThenAnnotation @254
+              reference: <testLibraryFragment>::@class::C::@constructor::commentThenAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @240
+                  name: SimpleIdentifier
+                    token: Object @241
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @247
+                    rightParenthesis: ) @248
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 206
+              codeLength: 74
+              periodOffset: 253
+              nameEnd: 275
+            commentAroundAnnotation @332
+              reference: <testLibraryFragment>::@class::C::@constructor::commentAroundAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @301
+                  name: SimpleIdentifier
+                    token: Object @302
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @308
+                    rightParenthesis: ) @309
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 301
+              codeLength: 59
+              periodOffset: 331
+              nameEnd: 355
+''');
+  }
+
+  test_codeRange_constructor_factory() async {
+    var library = await buildLibrary('''
+class C {
+  factory C() => throw 0;
+
+  factory C.raw() => throw 0;
+
+  /// Comment 1.
+  /// Comment 2.
+  factory C.hasDocComment() => throw 0;
+
+  @Object()
+  factory C.hasAnnotation() => throw 0;
+
+  @Object()
+  /// Comment 1.
+  /// Comment 2.
+  factory C.annotationThenComment() => throw 0;
+
+  /// Comment 1.
+  /// Comment 2.
+  @Object()
+  factory C.commentThenAnnotation() => throw 0;
+
+  /// Comment 1.
+  @Object()
+  /// Comment 2.
+  factory C.commentAroundAnnotation() => throw 0;
+}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 483
+          constructors
+            factory @20
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              codeOffset: 12
+              codeLength: 23
+            factory raw @49
+              reference: <testLibraryFragment>::@class::C::@constructor::raw
+              enclosingElement: <testLibraryFragment>::@class::C
+              codeOffset: 39
+              codeLength: 27
+              periodOffset: 48
+              nameEnd: 52
+            factory hasDocComment @114
+              reference: <testLibraryFragment>::@class::C::@constructor::hasDocComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              codeOffset: 70
+              codeLength: 71
+              periodOffset: 113
+              nameEnd: 127
+            factory hasAnnotation @167
+              reference: <testLibraryFragment>::@class::C::@constructor::hasAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @145
+                  name: SimpleIdentifier
+                    token: Object @146
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @152
+                    rightParenthesis: ) @153
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 145
+              codeLength: 49
+              periodOffset: 166
+              nameEnd: 180
+            factory annotationThenComment @254
+              reference: <testLibraryFragment>::@class::C::@constructor::annotationThenComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @198
+                  name: SimpleIdentifier
+                    token: Object @199
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @205
+                    rightParenthesis: ) @206
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 198
+              codeLength: 91
+              periodOffset: 253
+              nameEnd: 275
+            factory commentThenAnnotation @349
+              reference: <testLibraryFragment>::@class::C::@constructor::commentThenAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @327
+                  name: SimpleIdentifier
+                    token: Object @328
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @334
+                    rightParenthesis: ) @335
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 293
+              codeLength: 91
+              periodOffset: 348
+              nameEnd: 370
+            factory commentAroundAnnotation @444
+              reference: <testLibraryFragment>::@class::C::@constructor::commentAroundAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @405
+                  name: SimpleIdentifier
+                    token: Object @406
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @412
+                    rightParenthesis: ) @413
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 405
+              codeLength: 76
+              periodOffset: 443
+              nameEnd: 467
+''');
+  }
+
+  test_codeRange_extensions() async {
+    var library = await buildLibrary('''
+class A {}
+
+extension Raw on A {}
+
+/// Comment 1.
+/// Comment 2.
+extension HasDocComment on A {}
+
+@Object()
+extension HasAnnotation on A {}
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+extension AnnotationThenComment on A {}
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+extension CommentThenAnnotation on A {}
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+extension CommentAroundAnnotation on A {}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 10
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      extensions
+        Raw @22
+          reference: <testLibraryFragment>::@extension::Raw
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 12
+          codeLength: 21
+          extendedType: A
+        HasDocComment @75
+          reference: <testLibraryFragment>::@extension::HasDocComment
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          codeOffset: 35
+          codeLength: 61
+          extendedType: A
+        HasAnnotation @118
+          reference: <testLibraryFragment>::@extension::HasAnnotation
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @98
+              name: SimpleIdentifier
+                token: Object @99
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @105
+                rightParenthesis: ) @106
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 98
+          codeLength: 41
+          extendedType: A
+        AnnotationThenComment @191
+          reference: <testLibraryFragment>::@extension::AnnotationThenComment
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @141
+              name: SimpleIdentifier
+                token: Object @142
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @148
+                rightParenthesis: ) @149
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 141
+          codeLength: 79
+          extendedType: A
+        CommentThenAnnotation @272
+          reference: <testLibraryFragment>::@extension::CommentThenAnnotation
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @252
+              name: SimpleIdentifier
+                token: Object @253
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @259
+                rightParenthesis: ) @260
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 222
+          codeLength: 79
+          extendedType: A
+        CommentAroundAnnotation @353
+          reference: <testLibraryFragment>::@extension::CommentAroundAnnotation
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @318
+              name: SimpleIdentifier
+                token: Object @319
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @325
+                rightParenthesis: ) @326
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 318
+          codeLength: 66
+          extendedType: A
+''');
+  }
+
+  test_codeRange_field() async {
+    var library = await buildLibrary('''
+class C {
+  int withInit = 1;
+
+  int withoutInit;
+
+  int multiWithInit = 2, multiWithoutInit, multiWithInit2 = 3;
+}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 115
+          fields
+            withInit @16
+              reference: <testLibraryFragment>::@class::C::@field::withInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              codeOffset: 12
+              codeLength: 16
+              type: int
+              shouldUseTypeForInitializerInference: true
+            withoutInit @37
+              reference: <testLibraryFragment>::@class::C::@field::withoutInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              codeOffset: 33
+              codeLength: 15
+              type: int
+            multiWithInit @57
+              reference: <testLibraryFragment>::@class::C::@field::multiWithInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              codeOffset: 53
+              codeLength: 21
+              type: int
+              shouldUseTypeForInitializerInference: true
+            multiWithoutInit @76
+              reference: <testLibraryFragment>::@class::C::@field::multiWithoutInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              codeOffset: 76
+              codeLength: 16
+              type: int
+            multiWithInit2 @94
+              reference: <testLibraryFragment>::@class::C::@field::multiWithInit2
+              enclosingElement: <testLibraryFragment>::@class::C
+              codeOffset: 94
+              codeLength: 18
+              type: int
+              shouldUseTypeForInitializerInference: true
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get withInit @-1
+              reference: <testLibraryFragment>::@class::C::@getter::withInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set withInit= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::withInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _withInit @-1
+                  type: int
+              returnType: void
+            synthetic get withoutInit @-1
+              reference: <testLibraryFragment>::@class::C::@getter::withoutInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set withoutInit= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::withoutInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _withoutInit @-1
+                  type: int
+              returnType: void
+            synthetic get multiWithInit @-1
+              reference: <testLibraryFragment>::@class::C::@getter::multiWithInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set multiWithInit= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::multiWithInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _multiWithInit @-1
+                  type: int
+              returnType: void
+            synthetic get multiWithoutInit @-1
+              reference: <testLibraryFragment>::@class::C::@getter::multiWithoutInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set multiWithoutInit= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::multiWithoutInit
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _multiWithoutInit @-1
+                  type: int
+              returnType: void
+            synthetic get multiWithInit2 @-1
+              reference: <testLibraryFragment>::@class::C::@getter::multiWithInit2
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set multiWithInit2= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::multiWithInit2
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _multiWithInit2 @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_codeRange_field_annotations() async {
+    var library = await buildLibrary('''
+class C {
+  /// Comment 1.
+  /// Comment 2.
+  int hasDocComment, hasDocComment2;
+
+  @Object()
+  int hasAnnotation, hasAnnotation2;
+
+  @Object()
+  /// Comment 1.
+  /// Comment 2.
+  int annotationThenComment, annotationThenComment2;
+
+  /// Comment 1.
+  /// Comment 2.
+  @Object()
+  int commentThenAnnotation, commentThenAnnotation2;
+
+  /// Comment 1.
+  @Object()
+  /// Comment 2.
+  int commentAroundAnnotation, commentAroundAnnotation2;
+}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 436
+          fields
+            hasDocComment @50
+              reference: <testLibraryFragment>::@class::C::@field::hasDocComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              codeOffset: 12
+              codeLength: 51
+              type: int
+            hasDocComment2 @65
+              reference: <testLibraryFragment>::@class::C::@field::hasDocComment2
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              codeOffset: 65
+              codeLength: 14
+              type: int
+            hasAnnotation @100
+              reference: <testLibraryFragment>::@class::C::@field::hasAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @84
+                  name: SimpleIdentifier
+                    token: Object @85
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @91
+                    rightParenthesis: ) @92
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 84
+              codeLength: 29
+              type: int
+            hasAnnotation2 @115
+              reference: <testLibraryFragment>::@class::C::@field::hasAnnotation2
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @84
+                  name: SimpleIdentifier
+                    token: Object @85
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @91
+                    rightParenthesis: ) @92
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 115
+              codeLength: 14
+              type: int
+            annotationThenComment @184
+              reference: <testLibraryFragment>::@class::C::@field::annotationThenComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @134
+                  name: SimpleIdentifier
+                    token: Object @135
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @141
+                    rightParenthesis: ) @142
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 134
+              codeLength: 71
+              type: int
+            annotationThenComment2 @207
+              reference: <testLibraryFragment>::@class::C::@field::annotationThenComment2
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @134
+                  name: SimpleIdentifier
+                    token: Object @135
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @141
+                    rightParenthesis: ) @142
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 207
+              codeLength: 22
+              type: int
+            commentThenAnnotation @284
+              reference: <testLibraryFragment>::@class::C::@field::commentThenAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @268
+                  name: SimpleIdentifier
+                    token: Object @269
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @275
+                    rightParenthesis: ) @276
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 234
+              codeLength: 71
+              type: int
+            commentThenAnnotation2 @307
+              reference: <testLibraryFragment>::@class::C::@field::commentThenAnnotation2
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @268
+                  name: SimpleIdentifier
+                    token: Object @269
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @275
+                    rightParenthesis: ) @276
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 307
+              codeLength: 22
+              type: int
+            commentAroundAnnotation @384
+              reference: <testLibraryFragment>::@class::C::@field::commentAroundAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @351
+                  name: SimpleIdentifier
+                    token: Object @352
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @358
+                    rightParenthesis: ) @359
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 351
+              codeLength: 56
+              type: int
+            commentAroundAnnotation2 @409
+              reference: <testLibraryFragment>::@class::C::@field::commentAroundAnnotation2
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @351
+                  name: SimpleIdentifier
+                    token: Object @352
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @358
+                    rightParenthesis: ) @359
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 409
+              codeLength: 24
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get hasDocComment @-1
+              reference: <testLibraryFragment>::@class::C::@getter::hasDocComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set hasDocComment= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::hasDocComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _hasDocComment @-1
+                  type: int
+              returnType: void
+            synthetic get hasDocComment2 @-1
+              reference: <testLibraryFragment>::@class::C::@getter::hasDocComment2
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set hasDocComment2= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::hasDocComment2
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _hasDocComment2 @-1
+                  type: int
+              returnType: void
+            synthetic get hasAnnotation @-1
+              reference: <testLibraryFragment>::@class::C::@getter::hasAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set hasAnnotation= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::hasAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _hasAnnotation @-1
+                  type: int
+              returnType: void
+            synthetic get hasAnnotation2 @-1
+              reference: <testLibraryFragment>::@class::C::@getter::hasAnnotation2
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set hasAnnotation2= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::hasAnnotation2
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _hasAnnotation2 @-1
+                  type: int
+              returnType: void
+            synthetic get annotationThenComment @-1
+              reference: <testLibraryFragment>::@class::C::@getter::annotationThenComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set annotationThenComment= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::annotationThenComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _annotationThenComment @-1
+                  type: int
+              returnType: void
+            synthetic get annotationThenComment2 @-1
+              reference: <testLibraryFragment>::@class::C::@getter::annotationThenComment2
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set annotationThenComment2= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::annotationThenComment2
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _annotationThenComment2 @-1
+                  type: int
+              returnType: void
+            synthetic get commentThenAnnotation @-1
+              reference: <testLibraryFragment>::@class::C::@getter::commentThenAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set commentThenAnnotation= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::commentThenAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _commentThenAnnotation @-1
+                  type: int
+              returnType: void
+            synthetic get commentThenAnnotation2 @-1
+              reference: <testLibraryFragment>::@class::C::@getter::commentThenAnnotation2
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set commentThenAnnotation2= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::commentThenAnnotation2
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _commentThenAnnotation2 @-1
+                  type: int
+              returnType: void
+            synthetic get commentAroundAnnotation @-1
+              reference: <testLibraryFragment>::@class::C::@getter::commentAroundAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set commentAroundAnnotation= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::commentAroundAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _commentAroundAnnotation @-1
+                  type: int
+              returnType: void
+            synthetic get commentAroundAnnotation2 @-1
+              reference: <testLibraryFragment>::@class::C::@getter::commentAroundAnnotation2
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set commentAroundAnnotation2= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::commentAroundAnnotation2
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _commentAroundAnnotation2 @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_codeRange_function() async {
+    var library = await buildLibrary('''
+void raw() {}
+
+/// Comment 1.
+/// Comment 2.
+void hasDocComment() {}
+
+@Object()
+void hasAnnotation() {}
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+void annotationThenComment() {}
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+void commentThenAnnotation() {}
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+void commentAroundAnnotation() {}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        raw @5
+          reference: <testLibraryFragment>::@function::raw
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 13
+          returnType: void
+        hasDocComment @50
+          reference: <testLibraryFragment>::@function::hasDocComment
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          codeOffset: 15
+          codeLength: 53
+          returnType: void
+        hasAnnotation @85
+          reference: <testLibraryFragment>::@function::hasAnnotation
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @70
+              name: SimpleIdentifier
+                token: Object @71
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @77
+                rightParenthesis: ) @78
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 70
+          codeLength: 33
+          returnType: void
+        annotationThenComment @150
+          reference: <testLibraryFragment>::@function::annotationThenComment
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @105
+              name: SimpleIdentifier
+                token: Object @106
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @112
+                rightParenthesis: ) @113
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 105
+          codeLength: 71
+          returnType: void
+        commentThenAnnotation @223
+          reference: <testLibraryFragment>::@function::commentThenAnnotation
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @208
+              name: SimpleIdentifier
+                token: Object @209
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @215
+                rightParenthesis: ) @216
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 178
+          codeLength: 71
+          returnType: void
+        commentAroundAnnotation @296
+          reference: <testLibraryFragment>::@function::commentAroundAnnotation
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @266
+              name: SimpleIdentifier
+                token: Object @267
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @273
+                rightParenthesis: ) @274
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 266
+          codeLength: 58
+          returnType: void
+''');
+  }
+
+  test_codeRange_method() async {
+    var library = await buildLibrary('''
+class C {
+  void raw() {}
+
+  /// Comment 1.
+  /// Comment 2.
+  void hasDocComment() {}
+
+  @Object()
+  void hasAnnotation() {}
+
+  @Object()
+  /// Comment 1.
+  /// Comment 2.
+  void annotationThenComment() {}
+
+  /// Comment 1.
+  /// Comment 2.
+  @Object()
+  void commentThenAnnotation() {}
+
+  /// Comment 1.
+  @Object()
+  /// Comment 2.
+  void commentAroundAnnotation() {}
+}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 372
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            raw @17
+              reference: <testLibraryFragment>::@class::C::@method::raw
+              enclosingElement: <testLibraryFragment>::@class::C
+              codeOffset: 12
+              codeLength: 13
+              returnType: void
+            hasDocComment @68
+              reference: <testLibraryFragment>::@class::C::@method::hasDocComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              codeOffset: 29
+              codeLength: 57
+              returnType: void
+            hasAnnotation @107
+              reference: <testLibraryFragment>::@class::C::@method::hasAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              metadata
+                Annotation
+                  atSign: @ @90
+                  name: SimpleIdentifier
+                    token: Object @91
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @97
+                    rightParenthesis: ) @98
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 90
+              codeLength: 35
+              returnType: void
+            annotationThenComment @180
+              reference: <testLibraryFragment>::@class::C::@method::annotationThenComment
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @129
+                  name: SimpleIdentifier
+                    token: Object @130
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @136
+                    rightParenthesis: ) @137
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 129
+              codeLength: 77
+              returnType: void
+            commentThenAnnotation @261
+              reference: <testLibraryFragment>::@class::C::@method::commentThenAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 1.\n/// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @244
+                  name: SimpleIdentifier
+                    token: Object @245
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @251
+                    rightParenthesis: ) @252
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 210
+              codeLength: 77
+              returnType: void
+            commentAroundAnnotation @342
+              reference: <testLibraryFragment>::@class::C::@method::commentAroundAnnotation
+              enclosingElement: <testLibraryFragment>::@class::C
+              documentationComment: /// Comment 2.
+              metadata
+                Annotation
+                  atSign: @ @308
+                  name: SimpleIdentifier
+                    token: Object @309
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @315
+                    rightParenthesis: ) @316
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 308
+              codeLength: 62
+              returnType: void
+''');
+  }
+
+  test_codeRange_parameter() async {
+    var library = await buildLibrary('''
+main({int a = 1, int b, int c = 2}) {}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        main @0
+          reference: <testLibraryFragment>::@function::main
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 38
+          parameters
+            optionalNamed default a @10
+              reference: <testLibraryFragment>::@function::main::@parameter::a
+              type: int
+              codeOffset: 6
+              codeLength: 9
+              constantInitializer
+                IntegerLiteral
+                  literal: 1 @14
+                  staticType: int
+            optionalNamed default b @21
+              reference: <testLibraryFragment>::@function::main::@parameter::b
+              type: int
+              codeOffset: 17
+              codeLength: 5
+            optionalNamed default c @28
+              reference: <testLibraryFragment>::@function::main::@parameter::c
+              type: int
+              codeOffset: 24
+              codeLength: 9
+              constantInitializer
+                IntegerLiteral
+                  literal: 2 @32
+                  staticType: int
+          returnType: dynamic
+''');
+  }
+
+  test_codeRange_parameter_annotations() async {
+    var library = await buildLibrary('''
+main(@Object() int a, int b, @Object() int c) {}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        main @0
+          reference: <testLibraryFragment>::@function::main
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 48
+          parameters
+            requiredPositional a @19
+              type: int
+              metadata
+                Annotation
+                  atSign: @ @5
+                  name: SimpleIdentifier
+                    token: Object @6
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @12
+                    rightParenthesis: ) @13
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 5
+              codeLength: 15
+            requiredPositional b @26
+              type: int
+              codeOffset: 22
+              codeLength: 5
+            requiredPositional c @43
+              type: int
+              metadata
+                Annotation
+                  atSign: @ @29
+                  name: SimpleIdentifier
+                    token: Object @30
+                    staticElement: dart:core::<fragment>::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @36
+                    rightParenthesis: ) @37
+                  element: dart:core::<fragment>::@class::Object::@constructor::new
+              codeOffset: 29
+              codeLength: 15
+          returnType: dynamic
+''');
+  }
+
+  test_codeRange_topLevelVariable() async {
+    var library = await buildLibrary('''
+int withInit = 1 + 2 * 3;
+
+int withoutInit;
+
+int multiWithInit = 2, multiWithoutInit, multiWithInit2 = 3;
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static withInit @4
+          reference: <testLibraryFragment>::@topLevelVariable::withInit
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 24
+          type: int
+          shouldUseTypeForInitializerInference: true
+        static withoutInit @31
+          reference: <testLibraryFragment>::@topLevelVariable::withoutInit
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 27
+          codeLength: 15
+          type: int
+        static multiWithInit @49
+          reference: <testLibraryFragment>::@topLevelVariable::multiWithInit
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 45
+          codeLength: 21
+          type: int
+          shouldUseTypeForInitializerInference: true
+        static multiWithoutInit @68
+          reference: <testLibraryFragment>::@topLevelVariable::multiWithoutInit
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 68
+          codeLength: 16
+          type: int
+        static multiWithInit2 @86
+          reference: <testLibraryFragment>::@topLevelVariable::multiWithInit2
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 86
+          codeLength: 18
+          type: int
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get withInit @-1
+          reference: <testLibraryFragment>::@getter::withInit
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set withInit= @-1
+          reference: <testLibraryFragment>::@setter::withInit
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _withInit @-1
+              type: int
+          returnType: void
+        synthetic static get withoutInit @-1
+          reference: <testLibraryFragment>::@getter::withoutInit
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set withoutInit= @-1
+          reference: <testLibraryFragment>::@setter::withoutInit
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _withoutInit @-1
+              type: int
+          returnType: void
+        synthetic static get multiWithInit @-1
+          reference: <testLibraryFragment>::@getter::multiWithInit
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set multiWithInit= @-1
+          reference: <testLibraryFragment>::@setter::multiWithInit
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _multiWithInit @-1
+              type: int
+          returnType: void
+        synthetic static get multiWithoutInit @-1
+          reference: <testLibraryFragment>::@getter::multiWithoutInit
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set multiWithoutInit= @-1
+          reference: <testLibraryFragment>::@setter::multiWithoutInit
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _multiWithoutInit @-1
+              type: int
+          returnType: void
+        synthetic static get multiWithInit2 @-1
+          reference: <testLibraryFragment>::@getter::multiWithInit2
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set multiWithInit2= @-1
+          reference: <testLibraryFragment>::@setter::multiWithInit2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _multiWithInit2 @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_codeRange_topLevelVariable_annotations() async {
+    var library = await buildLibrary('''
+/// Comment 1.
+/// Comment 2.
+int hasDocComment, hasDocComment2;
+
+@Object()
+int hasAnnotation, hasAnnotation2;
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+int annotationThenComment, annotationThenComment2;
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+int commentThenAnnotation, commentThenAnnotation2;
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+int commentAroundAnnotation, commentAroundAnnotation2;
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static hasDocComment @34
+          reference: <testLibraryFragment>::@topLevelVariable::hasDocComment
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          codeOffset: 0
+          codeLength: 47
+          type: int
+        static hasDocComment2 @49
+          reference: <testLibraryFragment>::@topLevelVariable::hasDocComment2
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          codeOffset: 49
+          codeLength: 14
+          type: int
+        static hasAnnotation @80
+          reference: <testLibraryFragment>::@topLevelVariable::hasAnnotation
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @66
+              name: SimpleIdentifier
+                token: Object @67
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @73
+                rightParenthesis: ) @74
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 66
+          codeLength: 27
+          type: int
+        static hasAnnotation2 @95
+          reference: <testLibraryFragment>::@topLevelVariable::hasAnnotation2
+          enclosingElement: <testLibraryFragment>
+          metadata
+            Annotation
+              atSign: @ @66
+              name: SimpleIdentifier
+                token: Object @67
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @73
+                rightParenthesis: ) @74
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 95
+          codeLength: 14
+          type: int
+        static annotationThenComment @156
+          reference: <testLibraryFragment>::@topLevelVariable::annotationThenComment
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @112
+              name: SimpleIdentifier
+                token: Object @113
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @119
+                rightParenthesis: ) @120
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 112
+          codeLength: 65
+          type: int
+        static annotationThenComment2 @179
+          reference: <testLibraryFragment>::@topLevelVariable::annotationThenComment2
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @112
+              name: SimpleIdentifier
+                token: Object @113
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @119
+                rightParenthesis: ) @120
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 179
+          codeLength: 22
+          type: int
+        static commentThenAnnotation @248
+          reference: <testLibraryFragment>::@topLevelVariable::commentThenAnnotation
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @234
+              name: SimpleIdentifier
+                token: Object @235
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @241
+                rightParenthesis: ) @242
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 204
+          codeLength: 65
+          type: int
+        static commentThenAnnotation2 @271
+          reference: <testLibraryFragment>::@topLevelVariable::commentThenAnnotation2
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @234
+              name: SimpleIdentifier
+                token: Object @235
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @241
+                rightParenthesis: ) @242
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 271
+          codeLength: 22
+          type: int
+        static commentAroundAnnotation @340
+          reference: <testLibraryFragment>::@topLevelVariable::commentAroundAnnotation
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @311
+              name: SimpleIdentifier
+                token: Object @312
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @318
+                rightParenthesis: ) @319
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 311
+          codeLength: 52
+          type: int
+        static commentAroundAnnotation2 @365
+          reference: <testLibraryFragment>::@topLevelVariable::commentAroundAnnotation2
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @311
+              name: SimpleIdentifier
+                token: Object @312
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @318
+                rightParenthesis: ) @319
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 365
+          codeLength: 24
+          type: int
+      accessors
+        synthetic static get hasDocComment @-1
+          reference: <testLibraryFragment>::@getter::hasDocComment
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set hasDocComment= @-1
+          reference: <testLibraryFragment>::@setter::hasDocComment
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _hasDocComment @-1
+              type: int
+          returnType: void
+        synthetic static get hasDocComment2 @-1
+          reference: <testLibraryFragment>::@getter::hasDocComment2
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set hasDocComment2= @-1
+          reference: <testLibraryFragment>::@setter::hasDocComment2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _hasDocComment2 @-1
+              type: int
+          returnType: void
+        synthetic static get hasAnnotation @-1
+          reference: <testLibraryFragment>::@getter::hasAnnotation
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set hasAnnotation= @-1
+          reference: <testLibraryFragment>::@setter::hasAnnotation
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _hasAnnotation @-1
+              type: int
+          returnType: void
+        synthetic static get hasAnnotation2 @-1
+          reference: <testLibraryFragment>::@getter::hasAnnotation2
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set hasAnnotation2= @-1
+          reference: <testLibraryFragment>::@setter::hasAnnotation2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _hasAnnotation2 @-1
+              type: int
+          returnType: void
+        synthetic static get annotationThenComment @-1
+          reference: <testLibraryFragment>::@getter::annotationThenComment
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set annotationThenComment= @-1
+          reference: <testLibraryFragment>::@setter::annotationThenComment
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _annotationThenComment @-1
+              type: int
+          returnType: void
+        synthetic static get annotationThenComment2 @-1
+          reference: <testLibraryFragment>::@getter::annotationThenComment2
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set annotationThenComment2= @-1
+          reference: <testLibraryFragment>::@setter::annotationThenComment2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _annotationThenComment2 @-1
+              type: int
+          returnType: void
+        synthetic static get commentThenAnnotation @-1
+          reference: <testLibraryFragment>::@getter::commentThenAnnotation
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set commentThenAnnotation= @-1
+          reference: <testLibraryFragment>::@setter::commentThenAnnotation
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _commentThenAnnotation @-1
+              type: int
+          returnType: void
+        synthetic static get commentThenAnnotation2 @-1
+          reference: <testLibraryFragment>::@getter::commentThenAnnotation2
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set commentThenAnnotation2= @-1
+          reference: <testLibraryFragment>::@setter::commentThenAnnotation2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _commentThenAnnotation2 @-1
+              type: int
+          returnType: void
+        synthetic static get commentAroundAnnotation @-1
+          reference: <testLibraryFragment>::@getter::commentAroundAnnotation
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set commentAroundAnnotation= @-1
+          reference: <testLibraryFragment>::@setter::commentAroundAnnotation
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _commentAroundAnnotation @-1
+              type: int
+          returnType: void
+        synthetic static get commentAroundAnnotation2 @-1
+          reference: <testLibraryFragment>::@getter::commentAroundAnnotation2
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set commentAroundAnnotation2= @-1
+          reference: <testLibraryFragment>::@setter::commentAroundAnnotation2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _commentAroundAnnotation2 @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_codeRange_type_parameter() async {
+    var library = await buildLibrary('''
+class A<T> {}
+void f<U extends num> {}
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 0
+          codeLength: 13
+          typeParameters
+            covariant T @8
+              codeOffset: 8
+              codeLength: 1
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      functions
+        f @19
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          codeOffset: 14
+          codeLength: 24
+          typeParameters
+            covariant U @21
+              codeOffset: 21
+              codeLength: 13
+              bound: num
+              defaultType: num
+          returnType: void
+''');
+  }
+
+  test_nameOffset_class_constructor() async {
+    var library = await buildLibrary(r'''
+class A {
+  A();
+  A.named();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+            named @21
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 20
+              nameEnd: 26
+''');
+  }
+
+  test_nameOffset_class_constructor_parameter() async {
+    var library = await buildLibrary(r'''
+class A {
+  A(int a);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @18
+                  type: int
+''');
+  }
+
+  test_nameOffset_class_field() async {
+    var library = await buildLibrary(r'''
+class A {
+  int foo = 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            foo @16
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: true
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+            synthetic set foo= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_nameOffset_class_getter() async {
+    var library = await buildLibrary(r'''
+class A {
+  int get foo => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            get foo @20
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+''');
+  }
+
+  test_nameOffset_class_method() async {
+    var library = await buildLibrary(r'''
+class A {
+  void foo<T>(int a) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @17
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              typeParameters
+                covariant T @21
+                  defaultType: dynamic
+              parameters
+                requiredPositional a @28
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_nameOffset_class_setter() async {
+    var library = await buildLibrary(r'''
+class A {
+  set foo(int x) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            set foo= @16
+              reference: <testLibraryFragment>::@class::A::@setter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional x @24
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_nameOffset_class_typeParameter() async {
+    var library = await buildLibrary(r'''
+class A<T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_nameOffset_extension_typeParameter() async {
+    var library = await buildLibrary(r'''
+extension E<T> on int {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        E @10
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @12
+              defaultType: dynamic
+          extendedType: int
+''');
+  }
+
+  test_nameOffset_function_functionTypedFormal_parameter() async {
+    var library = await buildLibrary(r'''
+void f(void f<U>(int a)) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          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 buildLibrary(r'''
+void f({required void f<U>(int a)}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredNamed default f @22
+              reference: <testLibraryFragment>::@function::f::@parameter::f
+              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 buildLibrary(r'''
+void f<T>() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+          returnType: void
+''');
+  }
+
+  test_nameOffset_functionTypeAlias_typeParameter() async {
+    var library = await buildLibrary(r'''
+typedef void F<T>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated T @15
+              defaultType: dynamic
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_nameOffset_genericTypeAlias_typeParameter() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = void Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated T @10
+              defaultType: dynamic
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_nameOffset_mixin_typeParameter() async {
+    var library = await buildLibrary(r'''
+mixin M<T> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      mixins
+        mixin M @6
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_nameOffset_unit_getter() async {
+    var library = await buildLibrary(r'''
+int get foo => 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static get foo @8
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+}
+
+@reflectiveTest
+class OffsetsElementTest_fromBytes extends OffsetsElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class OffsetsElementTest_keepLinking extends OffsetsElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/part_include_test.dart b/pkg/analyzer/test/src/summary/elements/part_include_test.dart
new file mode 100644
index 0000000..19fbc71
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/part_include_test.dart
@@ -0,0 +1,418 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(PartIncludeElementTest_keepLinking);
+    defineReflectiveTests(PartIncludeElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class PartIncludeElementTest extends ElementsBaseTest {
+  test_library_parts() async {
+    addSource('$testPackageLibPath/a.dart', 'part of my.lib;');
+    addSource('$testPackageLibPath/b.dart', 'part of my.lib;');
+    var library =
+        await buildLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+    part_1
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+        part_1
+          uri: package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/b.dart
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_parts_nested() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+part of 'test.dart';
+part 'a11.dart';
+part 'a12.dart';
+class A {}
+''');
+
+    newFile('$testPackageLibPath/a11.dart', r'''
+part of 'a.dart';
+class A11 {}
+''');
+
+    newFile('$testPackageLibPath/a12.dart', r'''
+part of 'a.dart';
+class A12 {}
+''');
+
+    newFile('$testPackageLibPath/b.dart', r'''
+part of 'test.dart';
+part 'b11.dart';
+part 'b12.dart';
+''');
+
+    newFile('$testPackageLibPath/b11.dart', r'''
+part of 'b.dart';
+class B11 {}
+''');
+
+    newFile('$testPackageLibPath/b12.dart', r'''
+part of 'b.dart';
+class B12 {}
+''');
+
+    var library = await buildLibrary('''
+part 'a.dart';
+part 'b.dart';
+class Z {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+    part_1
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+        part_1
+          uri: package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/b.dart
+      classes
+        class Z @36
+          reference: <testLibraryFragment>::@class::Z
+          enclosingElement: <testLibraryFragment>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      parts
+        part_2
+          uri: package:test/a11.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+          unit: <testLibrary>::@fragment::package:test/a11.dart
+        part_3
+          uri: package:test/a12.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
+          unit: <testLibrary>::@fragment::package:test/a12.dart
+      classes
+        class A @61
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+    <testLibrary>::@fragment::package:test/a11.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class A11 @24
+          reference: <testLibrary>::@fragment::package:test/a11.dart::@class::A11
+          enclosingElement: <testLibrary>::@fragment::package:test/a11.dart
+    <testLibrary>::@fragment::package:test/a12.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class A12 @24
+          reference: <testLibrary>::@fragment::package:test/a12.dart::@class::A12
+          enclosingElement: <testLibrary>::@fragment::package:test/a12.dart
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      parts
+        part_4
+          uri: package:test/b11.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+          unit: <testLibrary>::@fragment::package:test/b11.dart
+        part_5
+          uri: package:test/b12.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
+          unit: <testLibrary>::@fragment::package:test/b12.dart
+    <testLibrary>::@fragment::package:test/b11.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class B11 @24
+          reference: <testLibrary>::@fragment::package:test/b11.dart::@class::B11
+          enclosingElement: <testLibrary>::@fragment::package:test/b11.dart
+    <testLibrary>::@fragment::package:test/b12.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class B12 @24
+          reference: <testLibrary>::@fragment::package:test/b12.dart::@class::B12
+          enclosingElement: <testLibrary>::@fragment::package:test/b12.dart
+''');
+  }
+
+  test_library_parts_noRelativeUriStr() async {
+    var library = await buildLibrary(r'''
+part '${'foo'}.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: noRelativeUriString
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_parts_withPart_partOfName() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+part of my.lib;
+class B {}
+''');
+    var library = await buildLibrary(r'''
+library my.lib;
+part 'a.dart';
+class A {}
+''');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        class A @37
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class B @22
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
+''');
+  }
+
+  test_library_parts_withPart_partOfUri() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+part of 'test.dart';
+class B {}
+''');
+    var library = await buildLibrary(r'''
+part 'a.dart';
+class A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        class A @21
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class B @27
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
+''');
+  }
+
+  test_library_parts_withRelativeUri_noSource() async {
+    var library = await buildLibrary(r'''
+part 'foo:bar';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: relativeUri 'foo:bar'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_parts_withRelativeUri_notPart_emptyUriSelf() async {
+    var library = await buildLibrary(r'''
+part '';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: source 'package:test/test.dart'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_parts_withRelativeUri_notPart_library() async {
+    newFile('$testPackageLibPath/a.dart', '');
+    var library = await buildLibrary(r'''
+part 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: source 'package:test/a.dart'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_parts_withRelativeUri_notPart_notExists() async {
+    var library = await buildLibrary(r'''
+part 'a.dart';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: source 'package:test/a.dart'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_library_parts_withRelativeUriString() async {
+    var library = await buildLibrary(r'''
+part ':';
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: relativeUriString ':'
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+}
+
+@reflectiveTest
+class PartIncludeElementTest_fromBytes extends PartIncludeElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class PartIncludeElementTest_keepLinking extends PartIncludeElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/record_type_test.dart b/pkg/analyzer/test/src/summary/elements/record_type_test.dart
new file mode 100644
index 0000000..769a1c4
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/record_type_test.dart
@@ -0,0 +1,583 @@
+// Copyright (c) 2024, 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 '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(RecordTypeElementTest_keepLinking);
+    defineReflectiveTests(RecordTypeElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class RecordTypeElementTest extends ElementsBaseTest {
+  test_recordType_class_field() async {
+    var library = await buildLibrary('''
+class A {
+  final (int, String) x;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @32
+              reference: <testLibraryFragment>::@class::A::@field::x
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: (int, String)
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::A::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: (int, String)
+''');
+  }
+
+  test_recordType_class_field_fromLiteral() async {
+    var library = await buildLibrary('''
+class A {
+  final x = (0, true);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            final x @18
+              reference: <testLibraryFragment>::@class::A::@field::x
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: (int, bool)
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::A::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: (int, bool)
+''');
+  }
+
+  test_recordType_class_method_formalParameter() async {
+    var library = await buildLibrary('''
+class A {
+  void foo((int, String) a) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @17
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional a @35
+                  type: (int, String)
+              returnType: void
+''');
+  }
+
+  test_recordType_class_method_returnType() async {
+    var library = await buildLibrary('''
+class A {
+  (int, String) foo() {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            foo @26
+              reference: <testLibraryFragment>::@class::A::@method::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: (int, String)
+''');
+  }
+
+  test_recordType_class_typeParameter_bound() async {
+    var library = await buildLibrary('''
+class A<T extends (int, String)> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: (int, String)
+              defaultType: (int, String)
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_recordType_extension_onType() async {
+    var library = await buildLibrary('''
+extension IntStringExtension on (int, String) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        IntStringExtension @10
+          reference: <testLibraryFragment>::@extension::IntStringExtension
+          enclosingElement: <testLibraryFragment>
+          extendedType: (int, String)
+''');
+  }
+
+  test_recordType_functionType_formalParameter() async {
+    var library = await buildLibrary('''
+void f(void Function((int, String) a) b) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional b @38
+              type: void Function((int, String))
+          returnType: void
+''');
+  }
+
+  test_recordType_functionType_returnType() async {
+    var library = await buildLibrary('''
+void f((int, String) Function() a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @32
+              type: (int, String) Function()
+          returnType: void
+''');
+  }
+
+  test_recordType_topFunction_formalParameter() async {
+    var library = await buildLibrary('''
+void f((int, String) a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @21
+              type: (int, String)
+          returnType: void
+''');
+  }
+
+  test_recordType_topFunction_returnType_empty() async {
+    var library = await buildLibrary('''
+() f() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @3
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: ()
+''');
+  }
+
+  test_recordType_topFunction_returnType_generic() async {
+    var library = await buildLibrary('''
+(int, T) f<T>() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @9
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @11
+              defaultType: dynamic
+          returnType: (int, T)
+''');
+  }
+
+  test_recordType_topFunction_returnType_mixed() async {
+    var library = await buildLibrary('''
+(int, String, {bool c}) f() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @24
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: (int, String, {bool c})
+''');
+  }
+
+  test_recordType_topFunction_returnType_named() async {
+    var library = await buildLibrary('''
+({int a, String b}) f() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @20
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: ({int a, String b})
+''');
+  }
+
+  test_recordType_topFunction_returnType_nested() async {
+    var library = await buildLibrary('''
+((int, String), (bool, double)) f() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @32
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: ((int, String), (bool, double))
+''');
+  }
+
+  test_recordType_topFunction_returnType_nullable() async {
+    var library = await buildLibrary('''
+(int, String)? f() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @15
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: (int, String)?
+''');
+  }
+
+  test_recordType_topFunction_returnType_positional() async {
+    var library = await buildLibrary('''
+(int, String) f() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @14
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: (int, String)
+''');
+  }
+
+  test_recordType_topFunction_returnType_positional_one() async {
+    var library = await buildLibrary('''
+(int,) f() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @7
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: (int,)
+''');
+  }
+
+  test_recordType_topVariable() async {
+    var library = await buildLibrary('''
+final (int, String) x;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final x @20
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: (int, String)
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: (int, String)
+''');
+  }
+
+  test_recordType_topVariable_fromLiteral() async {
+    var library = await buildLibrary('''
+final x = (0, true);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final x @6
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: (int, bool)
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: (int, bool)
+''');
+  }
+
+  test_recordTypeAnnotation_named() async {
+    var library = await buildLibrary(r'''
+const x = List<({int f1, String f2})>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @6
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            TypeLiteral
+              type: NamedType
+                name: List @10
+                typeArguments: TypeArgumentList
+                  leftBracket: < @14
+                  arguments
+                    RecordTypeAnnotation
+                      leftParenthesis: ( @15
+                      namedFields: RecordTypeAnnotationNamedFields
+                        leftBracket: { @16
+                        fields
+                          RecordTypeAnnotationNamedField
+                            type: NamedType
+                              name: int @17
+                              element: dart:core::<fragment>::@class::int
+                              type: int
+                            name: f1 @21
+                          RecordTypeAnnotationNamedField
+                            type: NamedType
+                              name: String @25
+                              element: dart:core::<fragment>::@class::String
+                              type: String
+                            name: f2 @32
+                        rightBracket: } @34
+                      rightParenthesis: ) @35
+                      type: ({int f1, String f2})
+                  rightBracket: > @36
+                element: dart:core::<fragment>::@class::List
+                type: List<({int f1, String f2})>
+              staticType: Type
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+''');
+  }
+
+  test_recordTypeAnnotation_positional() async {
+    var library = await buildLibrary(r'''
+const x = List<(int, String f2)>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @6
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            TypeLiteral
+              type: NamedType
+                name: List @10
+                typeArguments: TypeArgumentList
+                  leftBracket: < @14
+                  arguments
+                    RecordTypeAnnotation
+                      leftParenthesis: ( @15
+                      positionalFields
+                        RecordTypeAnnotationPositionalField
+                          type: NamedType
+                            name: int @16
+                            element: dart:core::<fragment>::@class::int
+                            type: int
+                        RecordTypeAnnotationPositionalField
+                          type: NamedType
+                            name: String @21
+                            element: dart:core::<fragment>::@class::String
+                            type: String
+                          name: f2 @28
+                      rightParenthesis: ) @30
+                      type: (int, String)
+                  rightBracket: > @31
+                element: dart:core::<fragment>::@class::List
+                type: List<(int, String)>
+              staticType: Type
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+''');
+  }
+}
+
+@reflectiveTest
+class RecordTypeElementTest_fromBytes extends RecordTypeElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class RecordTypeElementTest_keepLinking extends RecordTypeElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/since_sdk_version_test.dart b/pkg/analyzer/test/src/summary/elements/since_sdk_version_test.dart
new file mode 100644
index 0000000..4db5768
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/since_sdk_version_test.dart
@@ -0,0 +1,750 @@
+// Copyright (c) 2024, 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/analysis/results.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/test_utilities/mock_sdk.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../element_text.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(SinceSdkVersionElementTest_keepLinking);
+    defineReflectiveTests(SinceSdkVersionElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class SinceSdkVersionElementTest extends ElementsBaseTest {
+  @override
+  List<MockSdkLibrary> additionalMockSdkLibraries = [];
+
+  test_sinceSdkVersion_class_constructor_inherits() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+class A {
+  A.named();
+}
+
+class B {
+  B.named();
+}
+''');
+    configuration
+      ..forSinceSdkVersion()
+      ..withConstructors = true;
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      classes
+        class A @47
+          reference: dart:foo::<fragment>::@class::A
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          constructors
+            named @55
+              reference: dart:foo::<fragment>::@class::A::@constructor::named
+              enclosingElement: dart:foo::<fragment>::@class::A
+              sinceSdkVersion: 2.15.0
+              periodOffset: 54
+              nameEnd: 60
+        class B @73
+          reference: dart:foo::<fragment>::@class::B
+          enclosingElement: dart:foo::<fragment>
+          constructors
+            named @81
+              reference: dart:foo::<fragment>::@class::B::@constructor::named
+              enclosingElement: dart:foo::<fragment>::@class::B
+              periodOffset: 80
+              nameEnd: 86
+''');
+  }
+
+  test_sinceSdkVersion_class_field_inherits() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+class A {
+  int foo = 0;
+}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      classes
+        class A @47
+          reference: dart:foo::<fragment>::@class::A
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          fields
+            foo @57
+              reference: dart:foo::<fragment>::@class::A::@field::foo
+              enclosingElement: dart:foo::<fragment>::@class::A
+              sinceSdkVersion: 2.15.0
+              type: int
+              shouldUseTypeForInitializerInference: true
+          accessors
+            synthetic get foo @-1
+              reference: dart:foo::<fragment>::@class::A::@getter::foo
+              enclosingElement: dart:foo::<fragment>::@class::A
+              sinceSdkVersion: 2.15.0
+              returnType: int
+            synthetic set foo= @-1
+              reference: dart:foo::<fragment>::@class::A::@setter::foo
+              enclosingElement: dart:foo::<fragment>::@class::A
+              sinceSdkVersion: 2.15.0
+              parameters
+                requiredPositional _foo @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_class_getter_inherits() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+class A {
+  int get foo => 0;
+}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      classes
+        class A @47
+          reference: dart:foo::<fragment>::@class::A
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          fields
+            synthetic foo @-1
+              reference: dart:foo::<fragment>::@class::A::@field::foo
+              enclosingElement: dart:foo::<fragment>::@class::A
+              type: int
+          accessors
+            get foo @61
+              reference: dart:foo::<fragment>::@class::A::@getter::foo
+              enclosingElement: dart:foo::<fragment>::@class::A
+              sinceSdkVersion: 2.15.0
+              returnType: int
+''');
+  }
+
+  test_sinceSdkVersion_class_method_inherits() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+class A {
+  void foo() {}
+}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      classes
+        class A @47
+          reference: dart:foo::<fragment>::@class::A
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          methods
+            foo @58
+              reference: dart:foo::<fragment>::@class::A::@method::foo
+              enclosingElement: dart:foo::<fragment>::@class::A
+              sinceSdkVersion: 2.15.0
+              returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_class_method_max_greater() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+class A {
+  @Since('2.16')
+  void foo() {}
+}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      classes
+        class A @47
+          reference: dart:foo::<fragment>::@class::A
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          methods
+            foo @75
+              reference: dart:foo::<fragment>::@class::A::@method::foo
+              enclosingElement: dart:foo::<fragment>::@class::A
+              sinceSdkVersion: 2.16.0
+              returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_class_method_max_less() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+class A {
+  @Since('2.14')
+  void foo() {}
+}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      classes
+        class A @47
+          reference: dart:foo::<fragment>::@class::A
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          methods
+            foo @75
+              reference: dart:foo::<fragment>::@class::A::@method::foo
+              enclosingElement: dart:foo::<fragment>::@class::A
+              sinceSdkVersion: 2.15.0
+              returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_class_setter_inherits() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+class A {
+  set foo(int _) {}
+}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      classes
+        class A @47
+          reference: dart:foo::<fragment>::@class::A
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          fields
+            synthetic foo @-1
+              reference: dart:foo::<fragment>::@class::A::@field::foo
+              enclosingElement: dart:foo::<fragment>::@class::A
+              type: int
+          accessors
+            set foo= @57
+              reference: dart:foo::<fragment>::@class::A::@setter::foo
+              enclosingElement: dart:foo::<fragment>::@class::A
+              sinceSdkVersion: 2.15.0
+              parameters
+                requiredPositional _ @65
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_enum_constant() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+enum E {
+  v1,
+  @Since('2.15')
+  v2
+}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      enums
+        enum E @31
+          reference: dart:foo::<fragment>::@enum::E
+          enclosingElement: dart:foo::<fragment>
+          supertype: Enum
+          fields
+            static const enumConstant v1 @37
+              reference: dart:foo::<fragment>::@enum::E::@field::v1
+              enclosingElement: dart:foo::<fragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+            static const enumConstant v2 @60
+              reference: dart:foo::<fragment>::@enum::E::@field::v2
+              enclosingElement: dart:foo::<fragment>::@enum::E
+              sinceSdkVersion: 2.15.0
+              type: E
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: dart:foo::<fragment>::@enum::E::@field::values
+              enclosingElement: dart:foo::<fragment>::@enum::E
+              type: List<E>
+          accessors
+            synthetic static get v1 @-1
+              reference: dart:foo::<fragment>::@enum::E::@getter::v1
+              enclosingElement: dart:foo::<fragment>::@enum::E
+              returnType: E
+            synthetic static get v2 @-1
+              reference: dart:foo::<fragment>::@enum::E::@getter::v2
+              enclosingElement: dart:foo::<fragment>::@enum::E
+              sinceSdkVersion: 2.15.0
+              returnType: E
+            synthetic static get values @-1
+              reference: dart:foo::<fragment>::@enum::E::@getter::values
+              enclosingElement: dart:foo::<fragment>::@enum::E
+              returnType: List<E>
+''');
+  }
+
+  test_sinceSdkVersion_enum_method_inherits() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+enum E {
+  v;
+  void foo() {}
+}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      enums
+        enum E @46
+          reference: dart:foo::<fragment>::@enum::E
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          supertype: Enum
+          fields
+            static const enumConstant v @52
+              reference: dart:foo::<fragment>::@enum::E::@field::v
+              enclosingElement: dart:foo::<fragment>::@enum::E
+              sinceSdkVersion: 2.15.0
+              type: E
+              shouldUseTypeForInitializerInference: false
+            synthetic static const values @-1
+              reference: dart:foo::<fragment>::@enum::E::@field::values
+              enclosingElement: dart:foo::<fragment>::@enum::E
+              type: List<E>
+          accessors
+            synthetic static get v @-1
+              reference: dart:foo::<fragment>::@enum::E::@getter::v
+              enclosingElement: dart:foo::<fragment>::@enum::E
+              sinceSdkVersion: 2.15.0
+              returnType: E
+            synthetic static get values @-1
+              reference: dart:foo::<fragment>::@enum::E::@getter::values
+              enclosingElement: dart:foo::<fragment>::@enum::E
+              returnType: List<E>
+          methods
+            foo @62
+              reference: dart:foo::<fragment>::@enum::E::@method::foo
+              enclosingElement: dart:foo::<fragment>::@enum::E
+              sinceSdkVersion: 2.15.0
+              returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_extension_method_inherits() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+extension E on int {
+  void foo() {}
+}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      extensions
+        E @51
+          reference: dart:foo::<fragment>::@extension::E
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          extendedType: int
+          methods
+            foo @69
+              reference: dart:foo::<fragment>::@extension::E::@method::foo
+              enclosingElement: dart:foo::<fragment>::@extension::E
+              sinceSdkVersion: 2.15.0
+              returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_mixin_method_inherits() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+mixin M {
+  void foo() {}
+}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      mixins
+        mixin M @47
+          reference: dart:foo::<fragment>::@mixin::M
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          superclassConstraints
+            Object
+          methods
+            foo @58
+              reference: dart:foo::<fragment>::@mixin::M::@method::foo
+              enclosingElement: dart:foo::<fragment>::@mixin::M
+              sinceSdkVersion: 2.15.0
+              returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_unit_function() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+void foo() {}
+
+void bar() {}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      functions
+        foo @46
+          reference: dart:foo::<fragment>::@function::foo
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          returnType: void
+        bar @61
+          reference: dart:foo::<fragment>::@function::bar
+          enclosingElement: dart:foo::<fragment>
+          returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_unit_function_format_extended() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15.3-dev.7')
+void foo() {}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      functions
+        foo @54
+          reference: dart:foo::<fragment>::@function::foo
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.3-dev.7
+          returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_unit_function_format_full() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15.3')
+void foo() {}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      functions
+        foo @48
+          reference: dart:foo::<fragment>::@function::foo
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.3
+          returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_unit_function_format_invalid() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('42')
+void foo() {}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      functions
+        foo @44
+          reference: dart:foo::<fragment>::@function::foo
+          enclosingElement: dart:foo::<fragment>
+          returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_unit_function_inherits() async {
+    var library = await _buildDartFooLibrary(r'''
+@Since('2.15')
+library;
+
+import 'dart:_internal';
+
+void foo() {}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  sinceSdkVersion: 2.15.0
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      functions
+        foo @56
+          reference: dart:foo::<fragment>::@function::foo
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_unit_function_parameters_optionalNamed() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+void f(int p1, {
+  @Since('2.15')
+  int? p2,
+}) {}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      functions
+        f @31
+          reference: dart:foo::<fragment>::@function::f
+          enclosingElement: dart:foo::<fragment>
+          parameters
+            requiredPositional p1 @37
+              type: int
+            optionalNamed default p2 @67
+              reference: dart:foo::<fragment>::@function::f::@parameter::p2
+              type: int?
+              sinceSdkVersion: 2.15.0
+          returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_unit_function_parameters_optionalPositional() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+void f(int p1, [
+  @Since('2.15')
+  int? p2,
+]) {}
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      functions
+        f @31
+          reference: dart:foo::<fragment>::@function::f
+          enclosingElement: dart:foo::<fragment>
+          parameters
+            requiredPositional p1 @37
+              type: int
+            optionalPositional default p2 @67
+              type: int?
+              sinceSdkVersion: 2.15.0
+          returnType: void
+''');
+  }
+
+  test_sinceSdkVersion_unit_typeAlias() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+typedef A = List<int>;
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      typeAliases
+        A @49
+          reference: dart:foo::<fragment>::@typeAlias::A
+          sinceSdkVersion: 2.15.0
+          aliasedType: List<int>
+''');
+  }
+
+  test_sinceSdkVersion_unit_variable() async {
+    var library = await _buildDartFooLibrary(r'''
+import 'dart:_internal';
+
+@Since('2.15')
+final foo = 0;
+''');
+    configuration.forSinceSdkVersion();
+    checkElementText(library, r'''
+library
+  reference: dart:foo
+  definingUnit: dart:foo::<fragment>
+  units
+    dart:foo::<fragment>
+      enclosingElement: dart:foo
+      topLevelVariables
+        static final foo @47
+          reference: dart:foo::<fragment>::@topLevelVariable::foo
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get foo @-1
+          reference: dart:foo::<fragment>::@getter::foo
+          enclosingElement: dart:foo::<fragment>
+          sinceSdkVersion: 2.15.0
+          returnType: int
+''');
+  }
+
+  Future<LibraryElementImpl> _buildDartFooLibrary(String content) async {
+    additionalMockSdkLibraries.add(
+      MockSdkLibrary('foo', [
+        MockSdkLibraryUnit('foo/foo.dart', content),
+      ]),
+    );
+
+    return await _libraryByUriFromTest('dart:foo');
+  }
+
+  /// Returns the library for [uriStr] from the context of [testFile].
+  Future<LibraryElementImpl> _libraryByUriFromTest(String uriStr) async {
+    var analysisContext = contextFor(testFile);
+    var analysisSession = analysisContext.currentSession;
+
+    var libraryResult = await analysisSession.getLibraryByUri(uriStr);
+    libraryResult as LibraryElementResult;
+    return libraryResult.element as LibraryElementImpl;
+  }
+}
+
+@reflectiveTest
+class SinceSdkVersionElementTest_fromBytes extends SinceSdkVersionElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class SinceSdkVersionElementTest_keepLinking
+    extends SinceSdkVersionElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+extension on ElementTextConfiguration {
+  void forSinceSdkVersion() {
+    withConstantInitializers = false;
+    withConstructors = false;
+    withImports = false;
+    withMetadata = false;
+  }
+}
diff --git a/pkg/analyzer/test/src/summary/elements/test_all.dart b/pkg/analyzer/test/src/summary/elements/test_all.dart
new file mode 100644
index 0000000..09a66ed
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/test_all.dart
@@ -0,0 +1,65 @@
+// Copyright (c) 2024, 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 'augmentation_import_test.dart' as augmentation_import;
+import 'class_test.dart' as class_;
+import 'const_test.dart' as const_;
+import 'default_value_test.dart' as default_value;
+import 'duplicate_declaration_test.dart' as duplicate_declaration;
+import 'enum_test.dart' as enum_;
+import 'extension_test.dart' as extension_;
+import 'extension_type_test.dart' as extension_type;
+import 'formal_parameter_test.dart' as formal_parameter;
+import 'function_type_annotation_test.dart' as function_type_annotation;
+import 'library_augmentation_test.dart' as library_augmentation;
+import 'library_export_test.dart' as library_export;
+import 'library_import_test.dart' as library_import;
+import 'library_test.dart' as library_;
+import 'local_declarations_test.dart' as local_declarations;
+import 'metadata_test.dart' as metadata;
+import 'mixin_test.dart' as mixin_;
+import 'non_synthetic_test.dart' as non_synthetic;
+import 'offsets_test.dart' as offsets;
+import 'part_include_test.dart' as part_include;
+import 'record_type_test.dart' as record_type;
+import 'since_sdk_version_test.dart' as since_sdk_version;
+import 'top_level_function_test.dart' as top_level_function;
+import 'top_level_variable_test.dart' as top_level_variable;
+import 'type_alias_test.dart' as type_alias;
+import 'type_inference_test.dart' as type_inference;
+import 'types_test.dart' as types;
+
+main() {
+  defineReflectiveSuite(() {
+    augmentation_import.main();
+    class_.main();
+    const_.main();
+    default_value.main();
+    duplicate_declaration.main();
+    enum_.main();
+    extension_.main();
+    extension_type.main();
+    formal_parameter.main();
+    function_type_annotation.main();
+    library_augmentation.main();
+    library_export.main();
+    library_import.main();
+    library_.main();
+    local_declarations.main();
+    metadata.main();
+    mixin_.main();
+    non_synthetic.main();
+    offsets.main();
+    part_include.main();
+    record_type.main();
+    since_sdk_version.main();
+    top_level_function.main();
+    top_level_variable.main();
+    type_alias.main();
+    type_inference.main();
+    types.main();
+  }, name: 'elements');
+}
diff --git a/pkg/analyzer/test/src/summary/elements/top_level_function_test.dart b/pkg/analyzer/test/src/summary/elements/top_level_function_test.dart
new file mode 100644
index 0000000..60e8f5b
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/top_level_function_test.dart
@@ -0,0 +1,2091 @@
+// Copyright (c) 2024, 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/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(TopLevelFunctionElementTest_keepLinking);
+    defineReflectiveTests(TopLevelFunctionElementTest_fromBytes);
+    defineReflectiveTests(TopLevelFunctionElementTest_augmentation_keepLinking);
+    defineReflectiveTests(TopLevelFunctionElementTest_augmentation_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class TopLevelFunctionElementTest extends ElementsBaseTest {
+  test_function_async() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+Future f() async {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      functions
+        f @28 async
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: Future<dynamic>
+''');
+  }
+
+  test_function_asyncStar() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+Stream f() async* {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      functions
+        f @28 async*
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: Stream<dynamic>
+''');
+  }
+
+  test_function_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+f() {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @60
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * Docs\n */
+          returnType: dynamic
+''');
+  }
+
+  test_function_entry_point() async {
+    var library = await buildLibrary('main() {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        main @0
+          reference: <testLibraryFragment>::@function::main
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_function_entry_point_in_export() async {
+    addSource('$testPackageLibPath/a.dart', 'library a; main() {}');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_function_entry_point_in_export_hidden() async {
+    addSource('$testPackageLibPath/a.dart', 'library a; main() {}');
+    var library = await buildLibrary('export "a.dart" hide main;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      combinators
+        hide: main
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          combinators
+            hide: main
+''');
+  }
+
+  test_function_entry_point_in_part() async {
+    addSource('$testPackageLibPath/a.dart', 'part of my.lib; main() {}');
+    var library = await buildLibrary('library my.lib; part "a.dart";');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      functions
+        main @16
+          reference: <testLibrary>::@fragment::package:test/a.dart::@function::main
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: dynamic
+''');
+  }
+
+  test_function_external() async {
+    var library = await buildLibrary('external f();');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        external f @9
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_function_hasImplicitReturnType_false() async {
+    var library = await buildLibrary('''
+int f() => 0;
+''');
+    var f = library.definingCompilationUnit.functions.single;
+    expect(f.hasImplicitReturnType, isFalse);
+  }
+
+  test_function_hasImplicitReturnType_true() async {
+    var library = await buildLibrary('''
+f() => 0;
+''');
+    var f = library.definingCompilationUnit.functions.single;
+    expect(f.hasImplicitReturnType, isTrue);
+  }
+
+  test_function_parameter_const() async {
+    var library = await buildLibrary('''
+void f(const x) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional x @13
+              type: dynamic
+          returnType: void
+''');
+  }
+
+  test_function_parameter_fieldFormal() async {
+    var library = await buildLibrary('''
+void f(int this.a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional final this.a @16
+              type: int
+              field: <null>
+          returnType: void
+''');
+  }
+
+  test_function_parameter_fieldFormal_default() async {
+    var library = await buildLibrary('''
+void f({int this.a: 42}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalNamed default final this.a @17
+              reference: <testLibraryFragment>::@function::f::@parameter::a
+              type: int
+              constantInitializer
+                IntegerLiteral
+                  literal: 42 @20
+                  staticType: int
+              field: <null>
+          returnType: void
+''');
+  }
+
+  test_function_parameter_fieldFormal_functionTyped() async {
+    var library = await buildLibrary('''
+void f(int this.a(int b)) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional final this.a @16
+              type: int Function(int)
+              parameters
+                requiredPositional b @22
+                  type: int
+              field: <null>
+          returnType: void
+''');
+  }
+
+  test_function_parameter_final() async {
+    var library = await buildLibrary('f(final x) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional final x @8
+              type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_function_parameter_kind_named() async {
+    var library = await buildLibrary('f({x}) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalNamed default x @3
+              reference: <testLibraryFragment>::@function::f::@parameter::x
+              type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_function_parameter_kind_positional() async {
+    var library = await buildLibrary('f([x]) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalPositional default x @3
+              type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_function_parameter_kind_required() async {
+    var library = await buildLibrary('f(x) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional x @2
+              type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_function_parameter_parameters() async {
+    var library = await buildLibrary('f(g(x, y)) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          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 buildLibrary('f(int g()) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional g @6
+              type: int Function()
+          returnType: dynamic
+''');
+  }
+
+  test_function_parameter_return_type_void() async {
+    var library = await buildLibrary('f(void g()) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional g @7
+              type: void Function()
+          returnType: dynamic
+''');
+  }
+
+  test_function_parameter_type() async {
+    var library = await buildLibrary('f(int i) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional i @6
+              type: int
+          returnType: dynamic
+''');
+  }
+
+  test_function_parameter_type_typeParameter() async {
+    var library = await buildLibrary('''
+void f<T>(T a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+          parameters
+            requiredPositional a @12
+              type: T
+          returnType: void
+''');
+  }
+
+  test_function_parameter_type_unresolved() async {
+    var library = await buildLibrary(r'''
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @9
+              type: InvalidType
+          returnType: void
+''');
+  }
+
+  test_function_parameters() async {
+    var library = await buildLibrary('f(x, y) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional x @2
+              type: dynamic
+            requiredPositional y @5
+              type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_function_return_type_implicit() async {
+    var library = await buildLibrary('f() => null;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_function_return_type_unresolved() async {
+    var library = await buildLibrary(r'''
+A f() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @2
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+''');
+  }
+
+  test_function_return_type_void() async {
+    var library = await buildLibrary('void f() {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: void
+''');
+  }
+
+  test_function_returnType() async {
+    var library = await buildLibrary('''
+int f() => 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @4
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_function_returnType_typeParameter() async {
+    var library = await buildLibrary('''
+T f<T>() => throw 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @2
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @4
+              defaultType: dynamic
+          returnType: T
+''');
+  }
+
+  test_function_type_parameter_with_function_typed_parameter() async {
+    var library = await buildLibrary('void f<T, U>(T x(U u)) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+            covariant U @10
+              defaultType: dynamic
+          parameters
+            requiredPositional x @15
+              type: T Function(U)
+              parameters
+                requiredPositional u @19
+                  type: U
+          returnType: void
+''');
+  }
+
+  test_function_typed_parameter_implicit() async {
+    var library = await buildLibrary('f(g()) => null;');
+    expect(
+        library
+            .definingCompilationUnit.functions[0].parameters[0].hasImplicitType,
+        isFalse);
+  }
+
+  test_function_typeParameters_hasBound() async {
+    var library = await buildLibrary('''
+void f<T extends num>() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              bound: num
+              defaultType: num
+          returnType: void
+''');
+  }
+
+  test_function_typeParameters_noBound() async {
+    var library = await buildLibrary('''
+void f<T>() {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+          returnType: void
+''');
+  }
+
+  test_functions() async {
+    var library = await buildLibrary('f() {} g() {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        g @7
+          reference: <testLibraryFragment>::@function::g
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_main_class() async {
+    var library = await buildLibrary('class main {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class main @6
+          reference: <testLibraryFragment>::@class::main
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::main::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::main
+''');
+  }
+
+  test_main_class_alias() async {
+    var library =
+        await buildLibrary('class main = C with D; class C {} class D {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class alias main @6
+          reference: <testLibraryFragment>::@class::main
+          enclosingElement: <testLibraryFragment>
+          supertype: C
+          mixins
+            D
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::main::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::main
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::C::@constructor::new
+              superConstructor: <testLibraryFragment>::@class::C::@constructor::new
+        class C @29
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @40
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+''');
+  }
+
+  test_main_class_alias_via_export() async {
+    addSource('$testPackageLibPath/a.dart',
+        'class main = C with D; class C {} class D {}');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_main_class_via_export() async {
+    addSource('$testPackageLibPath/a.dart', 'class main {}');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_main_getter() async {
+    var library = await buildLibrary('get main => null;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static main @-1
+          reference: <testLibraryFragment>::@topLevelVariable::main
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        static get main @4
+          reference: <testLibraryFragment>::@getter::main
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_main_getter_via_export() async {
+    addSource('$testPackageLibPath/a.dart', 'get main => null;');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_main_typedef() async {
+    var library = await buildLibrary('typedef main();');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased main @8
+          reference: <testLibraryFragment>::@typeAlias::main
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+''');
+  }
+
+  test_main_typedef_via_export() async {
+    addSource('$testPackageLibPath/a.dart', 'typedef main();');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+
+  test_main_variable() async {
+    var library = await buildLibrary('var main;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static main @4
+          reference: <testLibraryFragment>::@topLevelVariable::main
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        synthetic static get main @-1
+          reference: <testLibraryFragment>::@getter::main
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set main= @-1
+          reference: <testLibraryFragment>::@setter::main
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _main @-1
+              type: dynamic
+          returnType: void
+''');
+  }
+
+  test_main_variable_via_export() async {
+    addSource('$testPackageLibPath/a.dart', 'var main;');
+    var library = await buildLibrary('export "a.dart";');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryExports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryExports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+''');
+  }
+}
+
+abstract class TopLevelFunctionElementTest_augmentation
+    extends ElementsBaseTest {
+  test_function_augmentationTarget() async {
+    newFile('$testPackageLibPath/a1.dart', r'''
+augment library 'test.dart';
+import augment 'a11.dart';
+import augment 'a12.dart';
+augment void foo() {}
+''');
+
+    newFile('$testPackageLibPath/a11.dart', r'''
+augment library 'a1.dart';
+augment void foo() {}
+''');
+
+    newFile('$testPackageLibPath/a12.dart', r'''
+augment library 'a1.dart';
+augment void foo() {}
+''');
+
+    newFile('$testPackageLibPath/a2.dart', r'''
+augment library 'test.dart';
+import augment 'a21.dart';
+import augment 'a22.dart';
+augment void foo() {}
+''');
+
+    newFile('$testPackageLibPath/a21.dart', r'''
+augment library 'a2.dart';
+augment void foo() {}
+''');
+
+    newFile('$testPackageLibPath/a22.dart', r'''
+augment library 'a2.dart';
+augment void foo() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a1.dart';
+import augment 'a2.dart';
+void foo() {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a1.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a1.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a1.dart
+      augmentationImports
+        package:test/a11.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
+          reference: <testLibrary>::@augmentation::package:test/a11.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a11.dart
+        package:test/a12.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
+          reference: <testLibrary>::@augmentation::package:test/a12.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a12.dart
+    package:test/a2.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a2.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a2.dart
+      augmentationImports
+        package:test/a21.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
+          reference: <testLibrary>::@augmentation::package:test/a21.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a21.dart
+        package:test/a22.dart
+          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
+          reference: <testLibrary>::@augmentation::package:test/a22.dart
+          definingUnit: <testLibrary>::@fragment::package:test/a22.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        foo @57
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: void
+          augmentation: <testLibrary>::@fragment::package:test/a1.dart::@functionAugmentation::foo
+    <testLibrary>::@fragment::package:test/a1.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
+      enclosingElement3: <testLibraryFragment>
+      functions
+        augment foo @96
+          reference: <testLibrary>::@fragment::package:test/a1.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a1.dart
+          returnType: void
+          augmentationTarget: <testLibraryFragment>::@function::foo
+          augmentation: <testLibrary>::@fragment::package:test/a11.dart::@functionAugmentation::foo
+    <testLibrary>::@fragment::package:test/a11.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a11.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
+      functions
+        augment foo @40
+          reference: <testLibrary>::@fragment::package:test/a11.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a11.dart
+          returnType: void
+          augmentationTarget: <testLibrary>::@fragment::package:test/a1.dart::@functionAugmentation::foo
+          augmentation: <testLibrary>::@fragment::package:test/a12.dart::@functionAugmentation::foo
+    <testLibrary>::@fragment::package:test/a12.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a12.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
+      functions
+        augment foo @40
+          reference: <testLibrary>::@fragment::package:test/a12.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a12.dart
+          returnType: void
+          augmentationTarget: <testLibrary>::@fragment::package:test/a11.dart::@functionAugmentation::foo
+          augmentation: <testLibrary>::@fragment::package:test/a2.dart::@functionAugmentation::foo
+    <testLibrary>::@fragment::package:test/a2.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
+      enclosingElement3: <testLibraryFragment>
+      functions
+        augment foo @96
+          reference: <testLibrary>::@fragment::package:test/a2.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a2.dart
+          returnType: void
+          augmentationTarget: <testLibrary>::@fragment::package:test/a12.dart::@functionAugmentation::foo
+          augmentation: <testLibrary>::@fragment::package:test/a21.dart::@functionAugmentation::foo
+    <testLibrary>::@fragment::package:test/a21.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a21.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
+      functions
+        augment foo @40
+          reference: <testLibrary>::@fragment::package:test/a21.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a21.dart
+          returnType: void
+          augmentationTarget: <testLibrary>::@fragment::package:test/a2.dart::@functionAugmentation::foo
+          augmentation: <testLibrary>::@fragment::package:test/a22.dart::@functionAugmentation::foo
+    <testLibrary>::@fragment::package:test/a22.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a22.dart
+      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
+      functions
+        augment foo @40
+          reference: <testLibrary>::@fragment::package:test/a22.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a22.dart
+          returnType: void
+          augmentationTarget: <testLibrary>::@fragment::package:test/a21.dart::@functionAugmentation::foo
+''');
+  }
+
+  test_function_augments_class() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment void foo() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+
+class foo {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class foo @32
+          reference: <testLibraryFragment>::@class::foo
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::foo::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      functions
+        augment foo @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: void
+          augmentationTargetAny: <testLibraryFragment>::@class::foo
+''');
+  }
+
+  test_function_augments_function() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment void foo() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+void foo() {}
+''');
+
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        foo @30
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: void
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      functions
+        augment foo @42
+          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: void
+          augmentationTarget: <testLibraryFragment>::@function::foo
+  exportedReferences
+    declared <testLibraryFragment>::@function::foo
+  exportNamespace
+    foo: <testLibraryFragment>::@function::foo
+''');
+  }
+
+  test_function_augments_function2() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+void foo() {}
+augment void foo() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      functions
+        foo @34
+          reference: <testLibrary>::@fragment::package:test/a.dart::@function::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: void
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
+        augment foo @56
+          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: void
+          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@function::foo
+  exportedReferences
+    declared <testLibrary>::@fragment::package:test/a.dart::@function::foo
+  exportNamespace
+    foo: <testLibrary>::@fragment::package:test/a.dart::@function::foo
+''');
+  }
+
+  test_function_augments_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment void foo() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+
+int get foo => 0;
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static get foo @34
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      functions
+        augment foo @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: void
+          augmentationTargetAny: <testLibraryFragment>::@getter::foo
+''');
+  }
+
+  test_function_augments_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment void foo() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+
+set foo(int _) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static set foo= @30
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _ @38
+              type: int
+          returnType: void
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      functions
+        augment foo @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: void
+          augmentationTargetAny: <testLibraryFragment>::@setter::foo
+''');
+  }
+
+  test_function_augments_variable() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+
+augment void foo() {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+
+int foo = 0;
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static foo @30
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set foo= @-1
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _foo @-1
+              type: int
+          returnType: void
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      functions
+        augment foo @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: void
+          augmentationTargetAny: <testLibraryFragment>::@getter::foo
+''');
+  }
+
+  test_getter_augments_class() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment int get foo => 0;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class foo {}
+''');
+
+    configuration
+      ..withConstructors = false
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class foo @31
+          reference: <testLibraryFragment>::@class::foo
+          enclosingElement: <testLibraryFragment>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      accessors
+        augment static get foo @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+          id: getter_0
+          variable: <null>
+          augmentationTargetAny: <testLibraryFragment>::@class::foo
+  exportedReferences
+    declared <testLibraryFragment>::@class::foo
+  exportNamespace
+    foo: <testLibraryFragment>::@class::foo
+''');
+  }
+
+  test_getter_augments_function() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment int get foo => 0;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+void foo() {}
+''');
+
+    configuration
+      ..withConstructors = false
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        foo @30
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: void
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      accessors
+        augment static get foo @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+          id: getter_0
+          variable: <null>
+          augmentationTargetAny: <testLibraryFragment>::@function::foo
+  exportedReferences
+    declared <testLibraryFragment>::@function::foo
+  exportNamespace
+    foo: <testLibraryFragment>::@function::foo
+''');
+  }
+
+  test_getter_augments_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment int get foo => 0;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+int get foo => 0;
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          id: variable_0
+          getter: getter_0
+      accessors
+        static get foo @33
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_0
+          variable: variable_0
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      accessors
+        augment static get foo @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+          id: getter_1
+          variable: variable_0
+          augmentationTarget: <testLibraryFragment>::@getter::foo
+  exportedReferences
+    declared <testLibraryFragment>::@getter::foo
+  exportNamespace
+    foo: <testLibraryFragment>::@getter::foo
+''');
+  }
+
+  test_getter_augments_nothing() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment int get foo => 0;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      accessors
+        augment static get foo @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+          id: getter_0
+          variable: <null>
+  exportedReferences
+  exportNamespace
+''');
+  }
+
+  test_getter_augments_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment int get foo => 0;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+set foo(int _) {}
+''');
+
+    configuration
+      ..withConstructors = false
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          id: variable_0
+          setter: setter_0
+      accessors
+        static set foo= @29
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _ @37
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      accessors
+        augment static get foo @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+          id: getter_0
+          variable: <null>
+          augmentationTargetAny: <testLibraryFragment>::@setter::foo
+  exportedReferences
+    declared <testLibraryFragment>::@setter::foo
+  exportNamespace
+    foo=: <testLibraryFragment>::@setter::foo
+''');
+  }
+
+  test_getter_augments_topVariable() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment int get foo => 0;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+int foo = 0;
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static foo @29
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          id: variable_0
+          getter: getter_0
+          setter: setter_0
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_0
+          variable: variable_0
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
+        synthetic static set foo= @-1
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _foo @-1
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      accessors
+        augment static get foo @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+          id: getter_1
+          variable: variable_0
+          augmentationTarget: <testLibraryFragment>::@getter::foo
+  exportedReferences
+    declared <testLibraryFragment>::@getter::foo
+    declared <testLibraryFragment>::@setter::foo
+  exportNamespace
+    foo: <testLibraryFragment>::@getter::foo
+    foo=: <testLibraryFragment>::@setter::foo
+''');
+  }
+
+  test_setter_augments_class() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment set foo(int _) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class foo {}
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class foo @31
+          reference: <testLibraryFragment>::@class::foo
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::foo::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      accessors
+        augment static set foo= @41
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _ @49
+              type: int
+          returnType: void
+          id: setter_0
+          variable: <null>
+          augmentationTargetAny: <testLibraryFragment>::@class::foo
+  exportedReferences
+    declared <testLibraryFragment>::@class::foo
+  exportNamespace
+    foo: <testLibraryFragment>::@class::foo
+''');
+  }
+
+  test_setter_augments_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment set foo(int _) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+int get foo => 0;
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          id: variable_0
+          getter: getter_0
+      accessors
+        static get foo @33
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_0
+          variable: variable_0
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      accessors
+        augment static set foo= @41
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _ @49
+              type: int
+          returnType: void
+          id: setter_0
+          variable: <null>
+          augmentationTargetAny: <testLibraryFragment>::@getter::foo
+  exportedReferences
+    declared <testLibraryFragment>::@getter::foo
+  exportNamespace
+    foo: <testLibraryFragment>::@getter::foo
+''');
+  }
+
+  test_setter_augments_nothing() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment set foo(int _) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      accessors
+        augment static set foo= @41
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _ @49
+              type: int
+          returnType: void
+          id: setter_0
+          variable: <null>
+  exportedReferences
+  exportNamespace
+''');
+  }
+
+  test_setter_augments_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment set foo(int _) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+set foo(int _) {}
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          id: variable_0
+          setter: setter_0
+      accessors
+        static set foo= @29
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _ @37
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      accessors
+        augment static set foo= @41
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _ @49
+              type: int
+          returnType: void
+          id: setter_1
+          variable: variable_0
+          augmentationTarget: <testLibraryFragment>::@setter::foo
+  exportedReferences
+    declared <testLibraryFragment>::@setter::foo
+  exportNamespace
+    foo=: <testLibraryFragment>::@setter::foo
+''');
+  }
+
+  test_setter_augments_topVariable() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment set foo(int _) {}
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+int foo = 0;
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static foo @29
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          id: variable_0
+          getter: getter_0
+          setter: setter_0
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_0
+          variable: variable_0
+        synthetic static set foo= @-1
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _foo @-1
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      accessors
+        augment static set foo= @41
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _ @49
+              type: int
+          returnType: void
+          id: setter_1
+          variable: variable_0
+          augmentationTarget: <testLibraryFragment>::@setter::foo
+  exportedReferences
+    declared <testLibraryFragment>::@getter::foo
+    declared <testLibraryFragment>::@setter::foo
+  exportNamespace
+    foo: <testLibraryFragment>::@getter::foo
+    foo=: <testLibraryFragment>::@setter::foo
+''');
+  }
+}
+
+@reflectiveTest
+class TopLevelFunctionElementTest_augmentation_fromBytes
+    extends TopLevelFunctionElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class TopLevelFunctionElementTest_augmentation_keepLinking
+    extends TopLevelFunctionElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+@reflectiveTest
+class TopLevelFunctionElementTest_fromBytes
+    extends TopLevelFunctionElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class TopLevelFunctionElementTest_keepLinking
+    extends TopLevelFunctionElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart b/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart
new file mode 100644
index 0000000..9465207
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart
@@ -0,0 +1,2240 @@
+// Copyright (c) 2024, 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/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(TopLevelVariableElementTest_keepLinking);
+    defineReflectiveTests(TopLevelVariableElementTest_fromBytes);
+    defineReflectiveTests(TopLevelVariableElementTest_augmentation_keepLinking);
+    defineReflectiveTests(TopLevelVariableElementTest_augmentation_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class TopLevelVariableElementTest extends ElementsBaseTest {
+  test_getter_async() async {
+    var library = await buildLibrary(r'''
+Future<int> get foo async => 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: Future<int>
+      accessors
+        static get foo @16 async
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: Future<int>
+''');
+  }
+
+  test_getter_asyncStar() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+Stream<int> get foo async* {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: Stream<int>
+      accessors
+        static get foo @37 async*
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: Stream<int>
+''');
+  }
+
+  test_getter_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+get x => null;''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        static get x @64
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * Docs\n */
+          returnType: dynamic
+''');
+  }
+
+  test_getter_external() async {
+    var library = await buildLibrary('external int get x;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static external get x @17
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_getter_inferred_type_nonStatic_implicit_return() async {
+    var library = await buildLibrary(
+        'class C extends D { get f => null; } abstract class D { int get f; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          fields
+            synthetic f @-1
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+          accessors
+            get f @24
+              reference: <testLibraryFragment>::@class::C::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+        abstract class D @52
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic f @-1
+              reference: <testLibraryFragment>::@class::D::@field::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          accessors
+            abstract get f @64
+              reference: <testLibraryFragment>::@class::D::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              returnType: int
+''');
+  }
+
+  test_getter_syncStar() async {
+    var library = await buildLibrary(r'''
+Iterator<int> get foo sync* {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: Iterator<int>
+      accessors
+        static get foo @18 sync*
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: Iterator<int>
+''');
+  }
+
+  test_getters() async {
+    var library = await buildLibrary('int get x => null; get y => null;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+        synthetic static y @-1
+          reference: <testLibraryFragment>::@topLevelVariable::y
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        static get x @8
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        static get y @23
+          reference: <testLibraryFragment>::@getter::y
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_implicitTopLevelVariable_getterFirst() async {
+    var library =
+        await buildLibrary('int get x => 0; void set x(int value) {}');
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+          id: variable_0
+          getter: getter_0
+          setter: setter_0
+      accessors
+        static get x @8
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_0
+          variable: variable_0
+        static set x= @25
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional value @31
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+''');
+  }
+
+  test_implicitTopLevelVariable_setterFirst() async {
+    var library =
+        await buildLibrary('void set x(int value) {} int get x => 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static set x= @9
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional value @15
+              type: int
+          returnType: void
+        static get x @33
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_setter_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+void set x(value) {}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        static set x= @69
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * Docs\n */
+          parameters
+            requiredPositional value @71
+              type: dynamic
+          returnType: void
+''');
+  }
+
+  test_setter_external() async {
+    var library = await buildLibrary('external void set x(int value);');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static external set x= @18
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional value @24
+              type: int
+          returnType: void
+''');
+  }
+
+  test_setter_inferred_type_top_level_implicit_return() async {
+    var library = await buildLibrary('set f(int value) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static f @-1
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static set f= @4
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional value @10
+              type: int
+          returnType: void
+''');
+  }
+
+  test_setters() async {
+    var library =
+        await buildLibrary('void set x(int value) {} set y(value) {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+        synthetic static y @-1
+          reference: <testLibraryFragment>::@topLevelVariable::y
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        static set x= @9
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional value @15
+              type: int
+          returnType: void
+        static set y= @29
+          reference: <testLibraryFragment>::@setter::y
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional value @31
+              type: dynamic
+          returnType: void
+''');
+  }
+
+  test_top_level_variable_external() async {
+    var library = await buildLibrary('''
+external int i;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static i @13
+          reference: <testLibraryFragment>::@topLevelVariable::i
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        synthetic static get i @-1
+          reference: <testLibraryFragment>::@getter::i
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set i= @-1
+          reference: <testLibraryFragment>::@setter::i
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _i @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_unit_implicitVariable_getterFirst() async {
+    var library = await buildLibrary('''
+int get x => 0;
+void set x(int value) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static get x @8
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        static set x= @25
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional value @31
+              type: int
+          returnType: void
+''');
+  }
+
+  test_unit_implicitVariable_setterFirst() async {
+    var library = await buildLibrary('''
+void set x(int value) {}
+int get x => 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static set x= @9
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional value @15
+              type: int
+          returnType: void
+        static get x @33
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_unit_variable_duplicate_getter() async {
+    var library = await buildLibrary('''
+int foo = 0;
+int get foo => 0;
+''');
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static foo @4
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          id: variable_0
+          getter: getter_0
+          setter: setter_0
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          id: variable_1
+          getter: getter_1
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo::@def::0
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_0
+          variable: variable_0
+        synthetic static set foo= @-1
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _foo @-1
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+        static get foo @21
+          reference: <testLibraryFragment>::@getter::foo::@def::1
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_1
+          variable: variable_1
+''');
+  }
+
+  test_unit_variable_duplicate_setter() async {
+    var library = await buildLibrary('''
+int foo = 0;
+set foo(int _) {}
+''');
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static foo @4
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          id: variable_0
+          getter: getter_0
+          setter: setter_0
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          id: variable_1
+          setter: setter_1
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_0
+          variable: variable_0
+        synthetic static set foo= @-1
+          reference: <testLibraryFragment>::@setter::foo::@def::0
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _foo @-1
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+        static set foo= @17
+          reference: <testLibraryFragment>::@setter::foo::@def::1
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _ @25
+              type: int
+          returnType: void
+          id: setter_1
+          variable: variable_1
+''');
+  }
+
+  test_unit_variable_final_withSetter() async {
+    var library = await buildLibrary(r'''
+final int foo = 0;
+set foo(int newValue) {}
+''');
+    configuration.withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final foo @10
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          id: variable_0
+          getter: getter_0
+          setter: setter_0
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_0
+          variable: variable_0
+        static set foo= @23
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional newValue @31
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+''');
+  }
+
+  test_variable() async {
+    var library = await buildLibrary('int x = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static x @4
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_variable_const() async {
+    var library = await buildLibrary('const int i = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const i @10
+          reference: <testLibraryFragment>::@topLevelVariable::i
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @14
+              staticType: int
+      accessors
+        synthetic static get i @-1
+          reference: <testLibraryFragment>::@getter::i
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_variable_const_late() async {
+    var library = await buildLibrary('late const int i = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static late const i @15
+          reference: <testLibraryFragment>::@topLevelVariable::i
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @19
+              staticType: int
+      accessors
+        synthetic static get i @-1
+          reference: <testLibraryFragment>::@getter::i
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_variable_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+var x;''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static x @64
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          documentationComment: /**\n * Docs\n */
+          type: dynamic
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: dynamic
+          returnType: void
+''');
+  }
+
+  test_variable_final() async {
+    var library = await buildLibrary('final int x = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final x @10
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_variable_getterInLib_setterInPart() async {
+    addSource('$testPackageLibPath/a.dart', '''
+part of my.lib;
+void set x(int _) {}
+''');
+    var library = await buildLibrary('''
+library my.lib;
+part 'a.dart';
+int get x => 42;''');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static get x @39
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::x
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+      accessors
+        static set x= @25
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::x
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _ @31
+              type: int
+          returnType: void
+''');
+  }
+
+  test_variable_getterInPart_setterInLib() async {
+    addSource('$testPackageLibPath/a.dart', '''
+part of my.lib;
+int get x => 42;
+''');
+    var library = await buildLibrary('''
+library my.lib;
+part 'a.dart';
+void set x(int _) {}
+''');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static set x= @40
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _ @46
+              type: int
+          returnType: void
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::x
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+      accessors
+        static get x @24
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::x
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+''');
+  }
+
+  test_variable_getterInPart_setterInPart() async {
+    addSource('$testPackageLibPath/a.dart', 'part of my.lib; int get x => 42;');
+    addSource(
+        '$testPackageLibPath/b.dart', 'part of my.lib; void set x(int _) {}');
+    var library =
+        await buildLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+    part_1
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+        part_1
+          uri: package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/b.dart
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::x
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+      accessors
+        static get x @24
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::x
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::x
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          type: int
+      accessors
+        static set x= @25
+          reference: <testLibrary>::@fragment::package:test/b.dart::@setter::x
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          parameters
+            requiredPositional _ @31
+              type: int
+          returnType: void
+''');
+  }
+
+  test_variable_implicit() async {
+    var library = await buildLibrary('int get x => 0;');
+
+    // We intentionally don't check the text, because we want to test
+    // requesting individual elements, not all accessors/variables at once.
+    var getter = _elementOfDefiningUnit(library, ['@getter', 'x'])
+        as PropertyAccessorElementImpl;
+    var variable = getter.variable2 as TopLevelVariableElementImpl;
+    expect(variable, isNotNull);
+    expect(variable.isFinal, isFalse);
+    expect(variable.getter, same(getter));
+    _assertTypeStr(variable.type, 'int');
+    expect(
+      variable,
+      same(
+        _elementOfDefiningUnit(library, ['@topLevelVariable', 'x']),
+      ),
+    );
+  }
+
+  test_variable_implicit_type() async {
+    var library = await buildLibrary('var x;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static x @4
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: dynamic
+          returnType: void
+''');
+  }
+
+  test_variable_initializer() async {
+    var library = await buildLibrary('int v = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static v @4
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_variable_initializer_final() async {
+    var library = await buildLibrary('final int v = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final v @10
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_variable_initializer_final_untyped() async {
+    var library = await buildLibrary('final v = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_variable_initializer_recordType() async {
+    var library = await buildLibrary('''
+const x = (1, true);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const x @6
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: (int, bool)
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            RecordLiteral
+              leftParenthesis: ( @10
+              fields
+                IntegerLiteral
+                  literal: 1 @11
+                  staticType: int
+                BooleanLiteral
+                  literal: true @14
+                  staticType: bool
+              rightParenthesis: ) @18
+              staticType: (int, bool)
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: (int, bool)
+''');
+  }
+
+  test_variable_initializer_staticMethod_ofExtension() async {
+    var library = await buildLibrary('''
+class A {}
+extension E on A {
+  static int f() => 0;
+}
+var x = E.f();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      extensions
+        E @21
+          reference: <testLibraryFragment>::@extension::E
+          enclosingElement: <testLibraryFragment>
+          extendedType: A
+          methods
+            static f @43
+              reference: <testLibraryFragment>::@extension::E::@method::f
+              enclosingElement: <testLibraryFragment>::@extension::E
+              returnType: int
+      topLevelVariables
+        static x @59
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_variable_initializer_untyped() async {
+    var library = await buildLibrary('var v = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static v @4
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_variable_late() async {
+    var library = await buildLibrary('late int x = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static late x @9
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_variable_late_final() async {
+    var library = await buildLibrary('late final int x;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static late final x @15
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_variable_late_final_initialized() async {
+    var library = await buildLibrary('late final int x = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static late final x @15
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_variable_propagatedType_const_noDep() async {
+    var library = await buildLibrary('const i = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const i @6
+          reference: <testLibraryFragment>::@topLevelVariable::i
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @10
+              staticType: int
+      accessors
+        synthetic static get i @-1
+          reference: <testLibraryFragment>::@getter::i
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_variable_propagatedType_final_dep_inLib() async {
+    addSource('$testPackageLibPath/a.dart', 'final a = 1;');
+    var library = await buildLibrary('import "a.dart"; final b = a / 2;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static final b @23
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: double
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: double
+''');
+  }
+
+  test_variable_propagatedType_final_dep_inPart() async {
+    addSource('$testPackageLibPath/a.dart', 'part of lib; final a = 1;');
+    var library =
+        await buildLibrary('library lib; part "a.dart"; final b = a / 2;');
+    checkElementText(library, r'''
+library
+  name: lib
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+      topLevelVariables
+        static final b @34
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: double
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: double
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static final a @19
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::a
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::a
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+''');
+  }
+
+  test_variable_propagatedType_final_noDep() async {
+    var library = await buildLibrary('final i = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final i @6
+          reference: <testLibraryFragment>::@topLevelVariable::i
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get i @-1
+          reference: <testLibraryFragment>::@getter::i
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+''');
+  }
+
+  test_variable_propagatedType_implicit_dep() async {
+    // The propagated type is defined in a library that is not imported.
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    addSource('$testPackageLibPath/b.dart', 'import "a.dart"; C f() => null;');
+    var library = await buildLibrary('import "b.dart"; final x = f();');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static final x @23
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+''');
+  }
+
+  test_variable_setterInPart_getterInPart() async {
+    addSource(
+        '$testPackageLibPath/a.dart', 'part of my.lib; void set x(int _) {}');
+    addSource('$testPackageLibPath/b.dart', 'part of my.lib; int get x => 42;');
+    var library =
+        await buildLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    checkElementText(library, r'''
+library
+  name: my.lib
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+    part_1
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+        part_1
+          uri: package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/b.dart
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::x
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+      accessors
+        static set x= @25
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::x
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _ @31
+              type: int
+          returnType: void
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        synthetic static x @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::x
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          type: int
+      accessors
+        static get x @24
+          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::x
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: int
+''');
+  }
+
+  test_variable_type_inferred() async {
+    var library = await buildLibrary('var v = 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static v @4
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_variable_type_inferred_Never() async {
+    var library = await buildLibrary(r'''
+var a = throw 42;
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static a @4
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: Never
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: Never
+        synthetic static set a= @-1
+          reference: <testLibraryFragment>::@setter::a
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _a @-1
+              type: Never
+          returnType: void
+''');
+  }
+
+  test_variable_type_inferred_noInitializer() async {
+    var library = await buildLibrary(r'''
+var a;
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static a @4
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set a= @-1
+          reference: <testLibraryFragment>::@setter::a
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _a @-1
+              type: dynamic
+          returnType: void
+''');
+  }
+
+  test_variableInitializer_contextType_after_astRewrite() async {
+    var library = await buildLibrary(r'''
+class A<T> {
+  const A();
+}
+const A<int> a = A();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            const @21
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      topLevelVariables
+        static const a @41
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: A<int>
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            InstanceCreationExpression
+              constructorName: ConstructorName
+                type: NamedType
+                  name: A @45
+                  element: <testLibraryFragment>::@class::A
+                  type: A<int>
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::A::@constructor::new
+                  substitution: {T: int}
+              argumentList: ArgumentList
+                leftParenthesis: ( @46
+                rightParenthesis: ) @47
+              staticType: A<int>
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: A<int>
+''');
+  }
+
+  test_variables() async {
+    var library = await buildLibrary('int i; int j;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static i @4
+          reference: <testLibraryFragment>::@topLevelVariable::i
+          enclosingElement: <testLibraryFragment>
+          type: int
+        static j @11
+          reference: <testLibraryFragment>::@topLevelVariable::j
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        synthetic static get i @-1
+          reference: <testLibraryFragment>::@getter::i
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set i= @-1
+          reference: <testLibraryFragment>::@setter::i
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _i @-1
+              type: int
+          returnType: void
+        synthetic static get j @-1
+          reference: <testLibraryFragment>::@getter::j
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set j= @-1
+          reference: <testLibraryFragment>::@setter::j
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _j @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  // TODO(scheglov): This is duplicate.
+  void _assertTypeStr(DartType type, String expected) {
+    var typeStr = type.getDisplayString();
+    expect(typeStr, expected);
+  }
+
+  // TODO(scheglov): This is duplicate.
+  Element _elementOfDefiningUnit(
+      LibraryElementImpl library, List<String> names) {
+    var reference = library.definingCompilationUnit.reference!;
+    for (var name in names) {
+      reference = reference.getChild(name);
+    }
+
+    var element = reference.element;
+    if (element != null) {
+      return element;
+    }
+
+    var elementFactory = library.linkedData!.elementFactory;
+    return elementFactory.elementOfReference(reference)!;
+  }
+}
+
+abstract class TopLevelVariableElementTest_augmentation
+    extends ElementsBaseTest {
+  test_variable_augments_class() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment int A = 0;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {}
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        augment static A @41
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+          shouldUseTypeForInitializerInference: true
+          id: variable_0
+          getter: getter_0
+          setter: setter_0
+          augmentationTargetAny: <testLibraryFragment>::@class::A
+      accessors
+        synthetic static get A @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+          id: getter_0
+          variable: variable_0
+        synthetic static set A= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::A
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _A @-1
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+  exportedReferences
+    declared <testLibrary>::@fragment::package:test/a.dart::@getter::A
+    declared <testLibrary>::@fragment::package:test/a.dart::@setter::A
+  exportNamespace
+    A: <testLibrary>::@fragment::package:test/a.dart::@getter::A
+    A=: <testLibrary>::@fragment::package:test/a.dart::@setter::A
+''');
+  }
+
+  test_variable_augments_function() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment int foo = 0;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+void foo() {}
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        foo @30
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: void
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        augment static foo @41
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+          shouldUseTypeForInitializerInference: true
+          id: variable_0
+          getter: getter_0
+          setter: setter_0
+          augmentationTargetAny: <testLibraryFragment>::@function::foo
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+          id: getter_0
+          variable: variable_0
+        synthetic static set foo= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _foo @-1
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+  exportedReferences
+    declared <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+    declared <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+  exportNamespace
+    foo: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+    foo=: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+''');
+  }
+
+  test_variable_augments_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment int foo = 0;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+int get foo => 0;
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          id: variable_0
+          getter: getter_0
+      accessors
+        static get foo @33
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_0
+          variable: variable_0
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        augment static foo @41
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+          shouldUseTypeForInitializerInference: true
+          id: variable_1
+          getter: getter_1
+          setter: setter_0
+          augmentationTargetAny: <testLibraryFragment>::@getter::foo
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+          id: getter_1
+          variable: variable_1
+        synthetic static set foo= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _foo @-1
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_1
+  exportedReferences
+    declared <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+    declared <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+  exportNamespace
+    foo: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+    foo=: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+''');
+  }
+
+  test_variable_augments_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment int foo = 0;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+set foo(int _) {}
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static foo @-1
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          id: variable_0
+          setter: setter_0
+      accessors
+        static set foo= @29
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _ @37
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        augment static foo @41
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+          shouldUseTypeForInitializerInference: true
+          id: variable_1
+          getter: getter_0
+          setter: setter_1
+          augmentationTargetAny: <testLibraryFragment>::@setter::foo
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+          id: getter_0
+          variable: variable_1
+        synthetic static set foo= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _foo @-1
+              type: int
+          returnType: void
+          id: setter_1
+          variable: variable_1
+  exportedReferences
+    declared <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+    declared <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+  exportNamespace
+    foo: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+    foo=: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+''');
+  }
+
+  test_variable_augments_variable() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment int foo = 1;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+int foo = 0;
+''');
+
+    configuration
+      ..withExportScope = true
+      ..withPropertyLinking = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static foo @29
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          id: variable_0
+          getter: getter_0
+          setter: setter_0
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+          id: getter_0
+          variable: variable_0
+        synthetic static set foo= @-1
+          reference: <testLibraryFragment>::@setter::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _foo @-1
+              type: int
+          returnType: void
+          id: setter_0
+          variable: variable_0
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        augment static foo @41
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+          shouldUseTypeForInitializerInference: true
+          id: variable_1
+          getter: getter_1
+          setter: setter_1
+          augmentationTarget: <testLibraryFragment>::@topLevelVariable::foo
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+          id: getter_1
+          variable: variable_1
+        synthetic static set foo= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _foo @-1
+              type: int
+          returnType: void
+          id: setter_1
+          variable: variable_1
+  exportedReferences
+    declared <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+    declared <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+  exportNamespace
+    foo: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+    foo=: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
+''');
+  }
+
+  test_variable_augments_variable_augmented_const_typed() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment const int foo = augmented + 1;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+const int foo = 0;
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static const foo @35
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            IntegerLiteral
+              literal: 0 @41
+              staticType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibraryFragment>::@getter::foo
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        augment static const foo @47
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: int
+          shouldUseTypeForInitializerInference: true
+          constantInitializer
+            BinaryExpression
+              leftOperand: AugmentedExpression
+                augmentedKeyword: augmented @53
+                element: <testLibraryFragment>::@topLevelVariable::foo
+                staticType: int
+              operator: + @63
+              rightOperand: IntegerLiteral
+                literal: 1 @65
+                staticType: int
+              staticElement: dart:core::<fragment>::@class::num::@method::+
+              staticInvokeType: num Function(num)
+              staticType: int
+          augmentationTarget: <testLibraryFragment>::@topLevelVariable::foo
+      accessors
+        synthetic static get foo @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: int
+''');
+  }
+}
+
+@reflectiveTest
+class TopLevelVariableElementTest_augmentation_fromBytes
+    extends TopLevelVariableElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class TopLevelVariableElementTest_augmentation_keepLinking
+    extends TopLevelVariableElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+@reflectiveTest
+class TopLevelVariableElementTest_fromBytes
+    extends TopLevelVariableElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class TopLevelVariableElementTest_keepLinking
+    extends TopLevelVariableElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/type_alias_test.dart b/pkg/analyzer/test/src/summary/elements/type_alias_test.dart
new file mode 100644
index 0000000..318123d05
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/type_alias_test.dart
@@ -0,0 +1,3905 @@
+// Copyright (c) 2024, 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/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(TypeAliasElementTest_keepLinking);
+    defineReflectiveTests(TypeAliasElementTest_fromBytes);
+    defineReflectiveTests(TypeAliasElementTest_augmentation_keepLinking);
+    defineReflectiveTests(TypeAliasElementTest_augmentation_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class TypeAliasElementTest extends ElementsBaseTest {
+  test_codeRange_functionTypeAlias() async {
+    var library = await buildLibrary('''
+typedef Raw();
+
+/// Comment 1.
+/// Comment 2.
+typedef HasDocComment();
+
+@Object()
+typedef HasAnnotation();
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+typedef AnnotationThenComment();
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+typedef CommentThenAnnotation();
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+typedef CommentAroundAnnotation();
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased Raw @8
+          reference: <testLibraryFragment>::@typeAlias::Raw
+          codeOffset: 0
+          codeLength: 14
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+        functionTypeAliasBased HasDocComment @54
+          reference: <testLibraryFragment>::@typeAlias::HasDocComment
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          codeOffset: 16
+          codeLength: 54
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+        functionTypeAliasBased HasAnnotation @90
+          reference: <testLibraryFragment>::@typeAlias::HasAnnotation
+          metadata
+            Annotation
+              atSign: @ @72
+              name: SimpleIdentifier
+                token: Object @73
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @79
+                rightParenthesis: ) @80
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 72
+          codeLength: 34
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+        functionTypeAliasBased AnnotationThenComment @156
+          reference: <testLibraryFragment>::@typeAlias::AnnotationThenComment
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @108
+              name: SimpleIdentifier
+                token: Object @109
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @115
+                rightParenthesis: ) @116
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 108
+          codeLength: 72
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+        functionTypeAliasBased CommentThenAnnotation @230
+          reference: <testLibraryFragment>::@typeAlias::CommentThenAnnotation
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @212
+              name: SimpleIdentifier
+                token: Object @213
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @219
+                rightParenthesis: ) @220
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 182
+          codeLength: 72
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+        functionTypeAliasBased CommentAroundAnnotation @304
+          reference: <testLibraryFragment>::@typeAlias::CommentAroundAnnotation
+          documentationComment: /// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @271
+              name: SimpleIdentifier
+                token: Object @272
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @278
+                rightParenthesis: ) @279
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 271
+          codeLength: 59
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+''');
+  }
+
+  test_codeRange_genericTypeAlias() async {
+    var library = await buildLibrary('''
+typedef Raw = Function();
+
+/// Comment 1.
+/// Comment 2.
+typedef HasDocComment = Function();
+
+@Object()
+typedef HasAnnotation = Function();
+
+@Object()
+/// Comment 1.
+/// Comment 2.
+typedef AnnotationThenComment = Function();
+
+/// Comment 1.
+/// Comment 2.
+@Object()
+typedef CommentThenAnnotation = Function();
+
+/// Comment 1.
+@Object()
+/// Comment 2.
+typedef CommentAroundAnnotation = Function();
+''');
+    configuration.withCodeRanges = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        Raw @8
+          reference: <testLibraryFragment>::@typeAlias::Raw
+          codeOffset: 0
+          codeLength: 25
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+        HasDocComment @65
+          reference: <testLibraryFragment>::@typeAlias::HasDocComment
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          codeOffset: 27
+          codeLength: 65
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+        HasAnnotation @112
+          reference: <testLibraryFragment>::@typeAlias::HasAnnotation
+          metadata
+            Annotation
+              atSign: @ @94
+              name: SimpleIdentifier
+                token: Object @95
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @101
+                rightParenthesis: ) @102
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 94
+          codeLength: 45
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+        AnnotationThenComment @189
+          reference: <testLibraryFragment>::@typeAlias::AnnotationThenComment
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @141
+              name: SimpleIdentifier
+                token: Object @142
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @148
+                rightParenthesis: ) @149
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 141
+          codeLength: 83
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+        CommentThenAnnotation @274
+          reference: <testLibraryFragment>::@typeAlias::CommentThenAnnotation
+          documentationComment: /// Comment 1.\n/// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @256
+              name: SimpleIdentifier
+                token: Object @257
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @263
+                rightParenthesis: ) @264
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 226
+          codeLength: 83
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+        CommentAroundAnnotation @359
+          reference: <testLibraryFragment>::@typeAlias::CommentAroundAnnotation
+          documentationComment: /// Comment 2.
+          metadata
+            Annotation
+              atSign: @ @326
+              name: SimpleIdentifier
+                token: Object @327
+                staticElement: dart:core::<fragment>::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @333
+                rightParenthesis: ) @334
+              element: dart:core::<fragment>::@class::Object::@constructor::new
+          codeOffset: 326
+          codeLength: 70
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+''');
+  }
+
+  test_functionTypeAlias_enclosingElements() async {
+    var library = await buildLibrary(r'''
+typedef void F<T>(int a);
+''');
+    var unit = library.definingCompilationUnit;
+
+    var F = unit.typeAliases[0];
+    expect(F.name, 'F');
+
+    var T = F.typeParameters[0];
+    expect(T.name, 'T');
+    expect(T.enclosingElement, same(F));
+
+    var function = F.aliasedElement as GenericFunctionTypeElement;
+    expect(function.enclosingElement, same(F));
+
+    var a = function.parameters[0];
+    expect(a.name, 'a');
+    expect(a.enclosingElement, same(function));
+  }
+
+  test_functionTypeAlias_type_element() async {
+    var library = await buildLibrary(r'''
+typedef T F<T>();
+F<int> a;
+''');
+    var unit = library.definingCompilationUnit;
+    var type = unit.topLevelVariables[0].type as FunctionType;
+
+    expect(type.alias!.element, same(unit.typeAliases[0]));
+    _assertTypeStrings(type.alias!.typeArguments, ['int']);
+  }
+
+  test_functionTypeAlias_typeParameters_variance_contravariant() async {
+    var library = await buildLibrary(r'''
+typedef void F<T>(T a);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @15
+              defaultType: dynamic
+          aliasedType: void Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @20
+                type: T
+            returnType: void
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_contravariant2() async {
+    var library = await buildLibrary(r'''
+typedef void F1<T>(T a);
+typedef F1<T> F2<T>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F1 @13
+          reference: <testLibraryFragment>::@typeAlias::F1
+          typeParameters
+            contravariant T @16
+              defaultType: dynamic
+          aliasedType: void Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @21
+                type: T
+            returnType: void
+        functionTypeAliasBased F2 @39
+          reference: <testLibraryFragment>::@typeAlias::F2
+          typeParameters
+            contravariant T @42
+              defaultType: dynamic
+          aliasedType: void Function(T) Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void Function(T)
+              alias: <testLibraryFragment>::@typeAlias::F1
+                typeArguments
+                  T
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_contravariant3() async {
+    var library = await buildLibrary(r'''
+typedef F1<T> F2<T>();
+typedef void F1<T>(T a);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F2 @14
+          reference: <testLibraryFragment>::@typeAlias::F2
+          typeParameters
+            contravariant T @17
+              defaultType: dynamic
+          aliasedType: void Function(T) Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void Function(T)
+              alias: <testLibraryFragment>::@typeAlias::F1
+                typeArguments
+                  T
+        functionTypeAliasBased F1 @36
+          reference: <testLibraryFragment>::@typeAlias::F1
+          typeParameters
+            contravariant T @39
+              defaultType: dynamic
+          aliasedType: void Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @44
+                type: T
+            returnType: void
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_covariant() async {
+    var library = await buildLibrary(r'''
+typedef T F<T>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @10
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            covariant T @12
+              defaultType: dynamic
+          aliasedType: T Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: T
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_covariant2() async {
+    var library = await buildLibrary(r'''
+typedef List<T> F<T>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @16
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            covariant T @18
+              defaultType: dynamic
+          aliasedType: List<T> Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: List<T>
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_covariant3() async {
+    var library = await buildLibrary(r'''
+typedef T F1<T>();
+typedef F1<T> F2<T>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F1 @10
+          reference: <testLibraryFragment>::@typeAlias::F1
+          typeParameters
+            covariant T @13
+              defaultType: dynamic
+          aliasedType: T Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: T
+        functionTypeAliasBased F2 @33
+          reference: <testLibraryFragment>::@typeAlias::F2
+          typeParameters
+            covariant T @36
+              defaultType: dynamic
+          aliasedType: T Function() Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: T Function()
+              alias: <testLibraryFragment>::@typeAlias::F1
+                typeArguments
+                  T
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_covariant4() async {
+    var library = await buildLibrary(r'''
+typedef void F1<T>(T a);
+typedef void F2<T>(F1<T> a);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F1 @13
+          reference: <testLibraryFragment>::@typeAlias::F1
+          typeParameters
+            contravariant T @16
+              defaultType: dynamic
+          aliasedType: void Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @21
+                type: T
+            returnType: void
+        functionTypeAliasBased F2 @38
+          reference: <testLibraryFragment>::@typeAlias::F2
+          typeParameters
+            covariant T @41
+              defaultType: dynamic
+          aliasedType: void Function(void Function(T))
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @50
+                type: void Function(T)
+                  alias: <testLibraryFragment>::@typeAlias::F1
+                    typeArguments
+                      T
+            returnType: void
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_invariant() async {
+    var library = await buildLibrary(r'''
+typedef T F<T>(T a);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @10
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            invariant T @12
+              defaultType: dynamic
+          aliasedType: T Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @17
+                type: T
+            returnType: T
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_invariant2() async {
+    var library = await buildLibrary(r'''
+typedef T F1<T>();
+typedef F1<T> F2<T>(T a);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F1 @10
+          reference: <testLibraryFragment>::@typeAlias::F1
+          typeParameters
+            covariant T @13
+              defaultType: dynamic
+          aliasedType: T Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: T
+        functionTypeAliasBased F2 @33
+          reference: <testLibraryFragment>::@typeAlias::F2
+          typeParameters
+            invariant T @36
+              defaultType: dynamic
+          aliasedType: T Function() Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @41
+                type: T
+            returnType: T Function()
+              alias: <testLibraryFragment>::@typeAlias::F1
+                typeArguments
+                  T
+''');
+  }
+
+  test_functionTypeAlias_typeParameters_variance_unrelated() async {
+    var library = await buildLibrary(r'''
+typedef void F<T>(int a);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated T @15
+              defaultType: dynamic
+          aliasedType: void Function(int)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @22
+                type: int
+            returnType: void
+''');
+  }
+
+  test_genericTypeAlias_enclosingElements() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = void Function<U>(int a);
+''');
+    var unit = library.definingCompilationUnit;
+
+    var F = unit.typeAliases[0];
+    expect(F.name, 'F');
+
+    var T = F.typeParameters[0];
+    expect(T.name, 'T');
+    expect(T.enclosingElement, same(F));
+
+    var function = F.aliasedElement as GenericFunctionTypeElement;
+    expect(function.enclosingElement, same(F));
+
+    var U = function.typeParameters[0];
+    expect(U.name, 'U');
+    expect(U.enclosingElement, same(function));
+
+    var a = function.parameters[0];
+    expect(a.name, 'a');
+    expect(a.enclosingElement, same(function));
+  }
+
+  test_genericTypeAlias_recursive() async {
+    var library = await buildLibrary('''
+typedef F<X extends F> = Function(F);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        notSimplyBounded F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated X @10
+              bound: dynamic
+              defaultType: dynamic
+          aliasedType: dynamic Function(dynamic)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional @-1
+                type: dynamic
+            returnType: dynamic
+''');
+  }
+
+  test_new_typedef_function_notSimplyBounded_functionType_returnType() async {
+    var library = await buildLibrary('''
+typedef F = G Function();
+typedef G = F Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        notSimplyBounded F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+        notSimplyBounded G @34
+          reference: <testLibraryFragment>::@typeAlias::G
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+''');
+  }
+
+  test_new_typedef_function_notSimplyBounded_functionType_returnType_viaInterfaceType() async {
+    var library = await buildLibrary('''
+typedef F = List<F> Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        notSimplyBounded F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: List<dynamic> Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: List<dynamic>
+''');
+  }
+
+  test_new_typedef_function_notSimplyBounded_self() async {
+    var library = await buildLibrary('''
+typedef F<T extends F> = void Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        notSimplyBounded F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated T @10
+              bound: dynamic
+              defaultType: dynamic
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_new_typedef_function_notSimplyBounded_simple_no_bounds() async {
+    var library = await buildLibrary('''
+typedef F<T> = void Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated T @10
+              defaultType: dynamic
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_new_typedef_function_notSimplyBounded_simple_non_generic() async {
+    var library = await buildLibrary('''
+typedef F = void Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_new_typedef_nonFunction_notSimplyBounded_self() async {
+    var library = await buildLibrary('''
+typedef F<T extends F> = List<int>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        notSimplyBounded F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated T @10
+              bound: dynamic
+              defaultType: dynamic
+          aliasedType: List<int>
+''');
+  }
+
+  test_new_typedef_nonFunction_notSimplyBounded_viaInterfaceType() async {
+    var library = await buildLibrary('''
+typedef F = List<F>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        notSimplyBounded F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: List<dynamic>
+''');
+  }
+
+  test_typeAlias_formalParameters_optional() async {
+    var library = await buildLibrary(r'''
+typedef A = void Function({int p});
+
+void f(A a) {}
+''');
+    configuration.withFunctionTypeParameters = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: void Function({int p})
+            parameters
+              optionalNamed p @-1
+                type: int
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              optionalNamed p @31
+                type: int
+            returnType: void
+      functions
+        f @42
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @46
+              type: void Function({int p})
+                alias: <testLibraryFragment>::@typeAlias::A
+                parameters
+                  optionalNamed p @-1
+                    type: int
+          returnType: void
+''');
+  }
+
+  test_typeAlias_parameter_typeParameters() async {
+    var library = await buildLibrary(r'''
+typedef void F(T a<T, U>(U u));
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function(T Function<T, U>(U))
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional a @17
+                type: T Function<T, U>(U)
+                typeParameters
+                  covariant T @19
+                  covariant U @22
+                parameters
+                  requiredPositional u @27
+                    type: U
+            returnType: void
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_contravariant() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = void Function(T);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          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 {
+    var library = await buildLibrary(r'''
+typedef F1<T> = void Function(T);
+typedef F2<T> = F1<T> Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F1 @8
+          reference: <testLibraryFragment>::@typeAlias::F1
+          typeParameters
+            contravariant T @11
+              defaultType: dynamic
+          aliasedType: void Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional @-1
+                type: T
+            returnType: void
+        F2 @42
+          reference: <testLibraryFragment>::@typeAlias::F2
+          typeParameters
+            contravariant T @45
+              defaultType: dynamic
+          aliasedType: void Function(T) Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void Function(T)
+              alias: <testLibraryFragment>::@typeAlias::F1
+                typeArguments
+                  T
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_covariant() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = T Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: T Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: T
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_covariant2() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = List<T> Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: List<T> Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: List<T>
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_covariant3() async {
+    var library = await buildLibrary(r'''
+typedef F1<T> = T Function();
+typedef F2<T> = F1<T> Function();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F1 @8
+          reference: <testLibraryFragment>::@typeAlias::F1
+          typeParameters
+            covariant T @11
+              defaultType: dynamic
+          aliasedType: T Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: T
+        F2 @38
+          reference: <testLibraryFragment>::@typeAlias::F2
+          typeParameters
+            covariant T @41
+              defaultType: dynamic
+          aliasedType: T Function() Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: T Function()
+              alias: <testLibraryFragment>::@typeAlias::F1
+                typeArguments
+                  T
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_covariant4() async {
+    var library = await buildLibrary(r'''
+typedef F1<T> = void Function(T);
+typedef F2<T> = void Function(F1<T>);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F1 @8
+          reference: <testLibraryFragment>::@typeAlias::F1
+          typeParameters
+            contravariant T @11
+              defaultType: dynamic
+          aliasedType: void Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional @-1
+                type: T
+            returnType: void
+        F2 @42
+          reference: <testLibraryFragment>::@typeAlias::F2
+          typeParameters
+            covariant T @45
+              defaultType: dynamic
+          aliasedType: void Function(void Function(T))
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional @-1
+                type: void Function(T)
+                  alias: <testLibraryFragment>::@typeAlias::F1
+                    typeArguments
+                      T
+            returnType: void
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_invalid() async {
+    var library = await buildLibrary(r'''
+class A {}
+typedef F<T> = void Function(A<int>);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      typeAliases
+        F @19
+          reference: <testLibraryFragment>::@typeAlias::F
+          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 {
+    var library = await buildLibrary(r'''
+typedef F = void Function();
+typedef G<T> = void Function(F<int>);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+        G @37
+          reference: <testLibraryFragment>::@typeAlias::G
+          typeParameters
+            unrelated T @39
+              defaultType: dynamic
+          aliasedType: void Function(void Function())
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional @-1
+                type: void Function()
+                  alias: <testLibraryFragment>::@typeAlias::F
+            returnType: void
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_invariant() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = T Function(T);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          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 {
+    var library = await buildLibrary(r'''
+typedef F1<T> = T Function();
+typedef F2<T> = F1<T> Function(T);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F1 @8
+          reference: <testLibraryFragment>::@typeAlias::F1
+          typeParameters
+            covariant T @11
+              defaultType: dynamic
+          aliasedType: T Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: T
+        F2 @38
+          reference: <testLibraryFragment>::@typeAlias::F2
+          typeParameters
+            invariant T @41
+              defaultType: dynamic
+          aliasedType: T Function() Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional @-1
+                type: T
+            returnType: T Function()
+              alias: <testLibraryFragment>::@typeAlias::F1
+                typeArguments
+                  T
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_function_unrelated() async {
+    var library = await buildLibrary(r'''
+typedef F<T> = void Function(int);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          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 {
+    var library = await buildLibrary(r'''
+typedef A<T> = List<void Function(T)>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            contravariant T @10
+              defaultType: dynamic
+          aliasedType: List<void Function(T)>
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_interface_contravariant2() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = void Function(T);
+typedef B<T> = List<A<T>>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            contravariant T @10
+              defaultType: dynamic
+          aliasedType: void Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional @-1
+                type: T
+            returnType: void
+        B @41
+          reference: <testLibraryFragment>::@typeAlias::B
+          typeParameters
+            contravariant T @43
+              defaultType: dynamic
+          aliasedType: List<void Function(T)>
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_interface_covariant() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = List<T>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: List<T>
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_interface_covariant2() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = Map<int, T>;
+typedef B<T> = List<A<T>>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: Map<int, T>
+        B @36
+          reference: <testLibraryFragment>::@typeAlias::B
+          typeParameters
+            covariant T @38
+              defaultType: dynamic
+          aliasedType: List<Map<int, T>>
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_record_contravariant() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = (void Function(T), int);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            contravariant T @10
+              defaultType: dynamic
+          aliasedType: (void Function(T), int)
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_record_contravariant2() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = (void Function(T), int);
+typedef B<T> = List<A<T>>;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            contravariant T @10
+              defaultType: dynamic
+          aliasedType: (void Function(T), int)
+        B @48
+          reference: <testLibraryFragment>::@typeAlias::B
+          typeParameters
+            contravariant T @50
+              defaultType: dynamic
+          aliasedType: List<(void Function(T), int)>
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_record_covariant() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = (T, int);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: (T, int)
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_record_invariant() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = (T Function(T), int);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            invariant T @10
+              defaultType: dynamic
+          aliasedType: (T Function(T), int)
+''');
+  }
+
+  test_typeAlias_typeParameters_variance_record_unrelated() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = (int, String);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            unrelated T @10
+              defaultType: dynamic
+          aliasedType: (int, String)
+''');
+  }
+
+  test_typedef_function_generic() async {
+    var library = await buildLibrary(
+        'typedef F<T> = int Function<S>(List<S> list, num Function<A>(A), T);');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @10
+              defaultType: dynamic
+          aliasedType: int Function<S>(List<S>, num Function<A>(A), T)
+          aliasedElement: GenericFunctionTypeElement
+            typeParameters
+              covariant S @28
+            parameters
+              requiredPositional list @39
+                type: List<S>
+              requiredPositional @-1
+                type: num Function<A>(A)
+              requiredPositional @-1
+                type: T
+            returnType: int
+''');
+  }
+
+  test_typedef_function_generic_asFieldType() async {
+    var library = await buildLibrary(r'''
+typedef Foo<S> = S Function<T>(T x);
+class A {
+  Foo<int> f;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @43
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            f @58
+              reference: <testLibraryFragment>::@class::A::@field::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int Function<T>(T)
+                alias: <testLibraryFragment>::@typeAlias::Foo
+                  typeArguments
+                    int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::A::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int Function<T>(T)
+                alias: <testLibraryFragment>::@typeAlias::Foo
+                  typeArguments
+                    int
+            synthetic set f= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _f @-1
+                  type: int Function<T>(T)
+                    alias: <testLibraryFragment>::@typeAlias::Foo
+                      typeArguments
+                        int
+              returnType: void
+      typeAliases
+        Foo @8
+          reference: <testLibraryFragment>::@typeAlias::Foo
+          typeParameters
+            covariant S @12
+              defaultType: dynamic
+          aliasedType: S Function<T>(T)
+          aliasedElement: GenericFunctionTypeElement
+            typeParameters
+              covariant T @28
+            parameters
+              requiredPositional x @33
+                type: T
+            returnType: S
+''');
+  }
+
+  test_typedef_function_notSimplyBounded_dependency_via_param_type_name_included() async {
+    // F is considered "not simply bounded" because it expands to a type that
+    // refers to C, which is not simply bounded.
+    var library = await buildLibrary('''
+typedef F = void Function(C c);
+class C<T extends C<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @38
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @40
+              bound: C<T>
+              defaultType: C<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        notSimplyBounded F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function(C<C<dynamic>>)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional c @28
+                type: C<C<dynamic>>
+            returnType: void
+''');
+  }
+
+  test_typedef_function_notSimplyBounded_dependency_via_param_type_name_omitted() async {
+    // F is considered "not simply bounded" because it expands to a type that
+    // refers to C, which is not simply bounded.
+    var library = await buildLibrary('''
+typedef F = void Function(C);
+class C<T extends C<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @36
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @38
+              bound: C<T>
+              defaultType: C<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        notSimplyBounded F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function(C<C<dynamic>>)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional @-1
+                type: C<C<dynamic>>
+            returnType: void
+''');
+  }
+
+  test_typedef_function_notSimplyBounded_dependency_via_return_type() async {
+    // F is considered "not simply bounded" because it expands to a type that
+    // refers to C, which is not simply bounded.
+    var library = await buildLibrary('''
+typedef F = C Function();
+class C<T extends C<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @32
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @34
+              bound: C<T>
+              defaultType: C<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        notSimplyBounded F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: C<C<dynamic>> Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: C<C<dynamic>>
+''');
+  }
+
+  test_typedef_function_typeParameters_f_bound_simple() async {
+    var library =
+        await buildLibrary('typedef F<T extends U, U> = U Function(T t);');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        notSimplyBounded F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @10
+              bound: U
+              defaultType: Never
+            covariant U @23
+              defaultType: dynamic
+          aliasedType: U Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional t @41
+                type: T
+            returnType: U
+''');
+  }
+
+  test_typedef_legacy_documented() async {
+    var library = await buildLibrary('''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+typedef F();''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @68
+          reference: <testLibraryFragment>::@typeAlias::F
+          documentationComment: /**\n * Docs\n */
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_notSimplyBounded_dependency_via_param_type() async {
+    // F is considered "not simply bounded" because it expands to a type that
+    // refers to C, which is not simply bounded.
+    var library = await buildLibrary('''
+typedef void F(C c);
+class C<T extends C<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @27
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @29
+              bound: C<T>
+              defaultType: C<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        functionTypeAliasBased notSimplyBounded F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function(C<C<dynamic>>)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional c @17
+                type: C<C<dynamic>>
+            returnType: void
+''');
+  }
+
+  test_typedef_legacy_notSimplyBounded_dependency_via_return_type() async {
+    // F is considered "not simply bounded" because it expands to a type that
+    // refers to C, which is not simply bounded.
+    var library = await buildLibrary('''
+typedef C F();
+class C<T extends C<T>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @21
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @23
+              bound: C<T>
+              defaultType: C<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        functionTypeAliasBased notSimplyBounded F @10
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: C<C<dynamic>> Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: C<C<dynamic>>
+''');
+  }
+
+  test_typedef_legacy_notSimplyBounded_self() async {
+    var library = await buildLibrary('''
+typedef void F<T extends F>();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased notSimplyBounded F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated T @15
+              bound: dynamic
+              defaultType: dynamic
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_typedef_legacy_notSimplyBounded_simple_because_non_generic() async {
+    var library = await buildLibrary('''
+typedef void F();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_typedef_legacy_notSimplyBounded_simple_no_bounds() async {
+    var library = await buildLibrary('typedef void F<T>();');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated T @15
+              defaultType: dynamic
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_typedef_legacy_parameter_hasImplicitType() async {
+    var library = await buildLibrary(r'''
+typedef void F(int a, b, [int c, d]);
+''');
+    var F = library.definingCompilationUnit.typeAliases.single;
+    var function = F.aliasedElement as GenericFunctionTypeElement;
+    // TODO(scheglov): Use better textual presentation with all information.
+    expect(function.parameters[0].hasImplicitType, false);
+    expect(function.parameters[1].hasImplicitType, true);
+    expect(function.parameters[2].hasImplicitType, false);
+    expect(function.parameters[3].hasImplicitType, true);
+  }
+
+  test_typedef_legacy_parameter_parameters() async {
+    var library = await buildLibrary('typedef F(g(x, y));');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function(dynamic Function(dynamic, dynamic))
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional g @10
+                type: dynamic Function(dynamic, dynamic)
+                parameters
+                  requiredPositional x @12
+                    type: dynamic
+                  requiredPositional y @15
+                    type: dynamic
+            returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameter_parameters_in_generic_class() async {
+    var library = await buildLibrary('typedef F<A, B>(A g(B x));');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant A @10
+              defaultType: dynamic
+            covariant B @13
+              defaultType: dynamic
+          aliasedType: dynamic Function(A Function(B))
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional g @18
+                type: A Function(B)
+                parameters
+                  requiredPositional x @22
+                    type: B
+            returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameter_return_type() async {
+    var library = await buildLibrary('typedef F(int g());');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function(int Function())
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional g @14
+                type: int Function()
+            returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameter_type() async {
+    var library = await buildLibrary('typedef F(int i);');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function(int)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional i @14
+                type: int
+            returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameter_type_generic() async {
+    var library = await buildLibrary('typedef F<T>(T t);');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @10
+              defaultType: dynamic
+          aliasedType: dynamic Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional t @15
+                type: T
+            returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameters() async {
+    var library = await buildLibrary('typedef F(x, y);');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function(dynamic, dynamic)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional x @10
+                type: dynamic
+              requiredPositional y @13
+                type: dynamic
+            returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_parameters_named() async {
+    var library = await buildLibrary('typedef F({y, z, x});');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function({dynamic x, dynamic y, dynamic z})
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              optionalNamed y @11
+                type: dynamic
+              optionalNamed z @14
+                type: dynamic
+              optionalNamed x @17
+                type: dynamic
+            returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_return_type() async {
+    var library = await buildLibrary('typedef int F();');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @12
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: int Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: int
+''');
+  }
+
+  test_typedef_legacy_return_type_generic() async {
+    var library = await buildLibrary('typedef T F<T>();');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @10
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            covariant T @12
+              defaultType: dynamic
+          aliasedType: T Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: T
+''');
+  }
+
+  test_typedef_legacy_return_type_implicit() async {
+    var library = await buildLibrary('typedef F();');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+''');
+  }
+
+  test_typedef_legacy_return_type_void() async {
+    var library = await buildLibrary('typedef void F();');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_typedef_legacy_typeParameters() async {
+    var library = await buildLibrary('typedef U F<T, U>(T t);');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @10
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @12
+              defaultType: dynamic
+            covariant U @15
+              defaultType: dynamic
+          aliasedType: U Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional t @20
+                type: T
+            returnType: U
+''');
+  }
+
+  test_typedef_legacy_typeParameters_bound() async {
+    var library = await buildLibrary(
+        'typedef U F<T extends Object, U extends D>(T t); class D {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class D @55
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+      typeAliases
+        functionTypeAliasBased F @10
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @12
+              bound: Object
+              defaultType: Object
+            covariant U @30
+              bound: D
+              defaultType: D
+          aliasedType: U Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional t @45
+                type: T
+            returnType: U
+''');
+  }
+
+  test_typedef_legacy_typeParameters_bound_recursive() async {
+    var library = await buildLibrary('typedef void F<T extends F>();');
+    // Typedefs cannot reference themselves.
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased notSimplyBounded F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated T @15
+              bound: dynamic
+              defaultType: dynamic
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_typedef_legacy_typeParameters_bound_recursive2() async {
+    var library = await buildLibrary('typedef void F<T extends List<F>>();');
+    // Typedefs cannot reference themselves.
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased notSimplyBounded F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            unrelated T @15
+              bound: List<dynamic>
+              defaultType: dynamic
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+''');
+  }
+
+  test_typedef_legacy_typeParameters_f_bound_complex() async {
+    var library = await buildLibrary('typedef U F<T extends List<U>, U>(T t);');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased notSimplyBounded F @10
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @12
+              bound: List<U>
+              defaultType: List<Never>
+            covariant U @31
+              defaultType: dynamic
+          aliasedType: U Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional t @36
+                type: T
+            returnType: U
+''');
+  }
+
+  test_typedef_legacy_typeParameters_f_bound_simple() async {
+    var library = await buildLibrary('typedef U F<T extends U, U>(T t);');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased notSimplyBounded F @10
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @12
+              bound: U
+              defaultType: Never
+            covariant U @25
+              defaultType: dynamic
+          aliasedType: U Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional t @30
+                type: T
+            returnType: U
+''');
+  }
+
+  @SkippedTest(
+    issue: 'https://github.com/dart-lang/sdk/issues/45291',
+    reason: 'Type dynamic is special, no support for its aliases yet',
+  )
+  test_typedef_nonFunction_aliasElement_dynamic() async {
+    var library = await buildLibrary(r'''
+typedef A = dynamic;
+void f(A a) {}
+''');
+
+    checkElementText(library, r'''
+typedef A = dynamic;
+void f(dynamic<aliasElement: self::@typeAlias::A> a) {}
+''');
+  }
+
+  test_typedef_nonFunction_aliasElement_functionType() async {
+    var library = await buildLibrary(r'''
+typedef A1 = void Function();
+typedef A2<R> = R Function();
+void f1(A1 a) {}
+void f2(A2<int> a) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A1 @8
+          reference: <testLibraryFragment>::@typeAlias::A1
+          aliasedType: void Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: void
+        A2 @38
+          reference: <testLibraryFragment>::@typeAlias::A2
+          typeParameters
+            covariant R @41
+              defaultType: dynamic
+          aliasedType: R Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: R
+      functions
+        f1 @65
+          reference: <testLibraryFragment>::@function::f1
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @71
+              type: void Function()
+                alias: <testLibraryFragment>::@typeAlias::A1
+          returnType: void
+        f2 @82
+          reference: <testLibraryFragment>::@function::f2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @93
+              type: int Function()
+                alias: <testLibraryFragment>::@typeAlias::A2
+                  typeArguments
+                    int
+          returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_aliasElement_interfaceType() async {
+    var library = await buildLibrary(r'''
+typedef A1 = List<int>;
+typedef A2<T, U> = Map<T, U>;
+void f1(A1 a) {}
+void f2(A2<int, String> a) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A1 @8
+          reference: <testLibraryFragment>::@typeAlias::A1
+          aliasedType: List<int>
+        A2 @32
+          reference: <testLibraryFragment>::@typeAlias::A2
+          typeParameters
+            covariant T @35
+              defaultType: dynamic
+            covariant U @38
+              defaultType: dynamic
+          aliasedType: Map<T, U>
+      functions
+        f1 @59
+          reference: <testLibraryFragment>::@function::f1
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @65
+              type: List<int>
+                alias: <testLibraryFragment>::@typeAlias::A1
+          returnType: void
+        f2 @76
+          reference: <testLibraryFragment>::@function::f2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @95
+              type: Map<int, String>
+                alias: <testLibraryFragment>::@typeAlias::A2
+                  typeArguments
+                    int
+                    String
+          returnType: void
+''');
+  }
+
+  @SkippedTest(
+    issue: 'https://github.com/dart-lang/sdk/issues/45291',
+    reason: 'Type Never is special, no support for its aliases yet',
+  )
+  test_typedef_nonFunction_aliasElement_never() async {
+    var library = await buildLibrary(r'''
+typedef A1 = Never;
+typedef A2<T> = Never?;
+void f1(A1 a) {}
+void f2(A2<int> a) {}
+''');
+
+    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) {}
+''');
+  }
+
+  test_typedef_nonFunction_aliasElement_recordType_generic() async {
+    var library = await buildLibrary(r'''
+typedef A<T, U> = (T, U);
+void f(A<int, String> a) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+            covariant U @13
+              defaultType: dynamic
+          aliasedType: (T, U)
+      functions
+        f @31
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @48
+              type: (int, String)
+                alias: <testLibraryFragment>::@typeAlias::A
+                  typeArguments
+                    int
+                    String
+          returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_aliasElement_typeParameterType() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = T;
+void f<U>(A<U> a) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: T
+      functions
+        f @23
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U @25
+              defaultType: dynamic
+          parameters
+            requiredPositional a @33
+              type: U
+                alias: <testLibraryFragment>::@typeAlias::A
+                  typeArguments
+                    U
+          returnType: void
+''');
+  }
+
+  @SkippedTest(
+    issue: 'https://github.com/dart-lang/sdk/issues/45291',
+    reason: 'Type void is special, no support for its aliases yet',
+  )
+  test_typedef_nonFunction_aliasElement_void() async {
+    var library = await buildLibrary(r'''
+typedef A = void;
+void f(A a) {}
+''');
+
+    checkElementText(library, r'''
+typedef A = void;
+void f(void<aliasElement: self::@typeAlias::A> a) {}
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_interfaceType_none() async {
+    var library = await buildLibrary(r'''
+typedef X<T> = A<int, T>;
+class A<T, U> {}
+class B implements X<String> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @32
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @34
+              defaultType: dynamic
+            covariant U @37
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @49
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            A<int, String>
+              alias: <testLibraryFragment>::@typeAlias::X
+                typeArguments
+                  String
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: A<int, T>
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_interfaceType_question() async {
+    var library = await buildLibrary(r'''
+typedef X<T> = A<T>?;
+class A<T> {}
+class B {}
+class C {}
+class D implements B, X<int>, C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @28
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @30
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @42
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @53
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @64
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            B
+            C
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: A<T>?
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_interfaceType_question2() async {
+    var library = await buildLibrary(r'''
+typedef X<T> = A<T?>;
+class A<T> {}
+class B {}
+class C {}
+class D implements B, X<int>, C {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @28
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @30
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @42
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @53
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @64
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            B
+            A<int?>
+              alias: <testLibraryFragment>::@typeAlias::X
+                typeArguments
+                  int
+            C
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: A<T?>
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_Never_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Never;
+class A implements X {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @25
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: Never
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_Null_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Null;
+class A implements X {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @24
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: Null
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_typeParameterType() async {
+    var library = await buildLibrary(r'''
+typedef X<T> = T;
+class A {}
+class B {}
+class C<U> implements A, X<U>, B {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @24
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @35
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @46
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U @48
+              defaultType: dynamic
+          interfaces
+            A
+            B
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: T
+''');
+  }
+
+  test_typedef_nonFunction_asInterfaceType_void() async {
+    var library = await buildLibrary(r'''
+typedef X = void;
+class A {}
+class B {}
+class C implements A, X, B {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @24
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @35
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+        class C @46
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            A
+            B
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: void
+''');
+  }
+
+  test_typedef_nonFunction_asMixinType_none() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int>;
+class A<T> {}
+class B with X {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @26
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @28
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @40
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            A<int>
+              alias: <testLibraryFragment>::@typeAlias::X
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: A<int>
+''');
+  }
+
+  test_typedef_nonFunction_asMixinType_question() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int>?;
+class A<T> {}
+mixin M1 {}
+mixin M2 {}
+class B with M1, X, M2 {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @27
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @29
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @65
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M1
+            M2
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+      mixins
+        mixin M1 @41
+          reference: <testLibraryFragment>::@mixin::M1
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+        mixin M2 @53
+          reference: <testLibraryFragment>::@mixin::M2
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: A<int>?
+''');
+  }
+
+  test_typedef_nonFunction_asMixinType_question2() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int?>;
+class A<T> {}
+mixin M1 {}
+mixin M2 {}
+class B with M1, X, M2 {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @27
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @29
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @65
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: Object
+          mixins
+            M1
+            A<int?>
+              alias: <testLibraryFragment>::@typeAlias::X
+            M2
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+      mixins
+        mixin M1 @41
+          reference: <testLibraryFragment>::@mixin::M1
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+        mixin M2 @53
+          reference: <testLibraryFragment>::@mixin::M2
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: A<int?>
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_Never_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Never;
+class A extends X {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @25
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: Never
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_none() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int>;
+class A<T> {}
+class B extends X {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @26
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @28
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @40
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A<int>
+            alias: <testLibraryFragment>::@typeAlias::X
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: int}
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: A<int>
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_none_viaTypeParameter() async {
+    var library = await buildLibrary(r'''
+typedef X<T> = T;
+class A<T> {}
+class B extends X<A<int>> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @24
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @26
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @38
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A<int>
+            alias: <testLibraryFragment>::@typeAlias::X
+              typeArguments
+                A<int>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: int}
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: T
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_Null_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Null;
+class A extends X {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @24
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: Null
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_question() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int>?;
+class A<T> {}
+class D extends X {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @27
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @29
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class D @41
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: A<int>?
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_interfaceType_question2() async {
+    var library = await buildLibrary(r'''
+typedef X = A<int?>;
+class A<T> {}
+class D extends X {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @27
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @29
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class D @41
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          supertype: A<int?>
+            alias: <testLibraryFragment>::@typeAlias::X
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: int?}
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: A<int?>
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_Never_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Never;
+class A extends X {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @25
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: Never
+''');
+  }
+
+  test_typedef_nonFunction_asSuperType_Null_none() async {
+    var library = await buildLibrary(r'''
+typedef X = Null;
+class A extends X {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @24
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+      typeAliases
+        X @8
+          reference: <testLibraryFragment>::@typeAlias::X
+          aliasedType: Null
+''');
+  }
+
+  test_typedef_nonFunction_using_dynamic() async {
+    var library = await buildLibrary(r'''
+typedef A = dynamic;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: dynamic
+      functions
+        f @26
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @30
+              type: dynamic
+          returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_interface_disabled() async {
+    var library = await buildLibrary(r'''
+// @dart = 2.12
+typedef A = int;
+void f(A a) {}
+''');
+
+    var alias = library.definingCompilationUnit.typeAliases[0];
+    _assertTypeStr(alias.aliasedType, 'dynamic Function()');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @24
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: dynamic Function()
+      functions
+        f @38
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @42
+              type: dynamic Function()
+                alias: <testLibraryFragment>::@typeAlias::A
+          returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_interface_noTypeParameters() async {
+    var library = await buildLibrary(r'''
+typedef A = int;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: int
+      functions
+        f @22
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @26
+              type: int
+                alias: <testLibraryFragment>::@typeAlias::A
+          returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_interface_noTypeParameters_question() async {
+    var library = await buildLibrary(r'''
+typedef A = int?;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: int?
+      functions
+        f @23
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @27
+              type: int?
+                alias: <testLibraryFragment>::@typeAlias::A
+          returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_interface_withTypeParameters() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = Map<int, T>;
+void f(A<String> a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: Map<int, T>
+      functions
+        f @33
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @45
+              type: Map<int, String>
+                alias: <testLibraryFragment>::@typeAlias::A
+                  typeArguments
+                    String
+          returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_Never_none() async {
+    var library = await buildLibrary(r'''
+typedef A = Never;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: Never
+      functions
+        f @24
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @28
+              type: Never
+          returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_Never_question() async {
+    var library = await buildLibrary(r'''
+typedef A = Never?;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: Never?
+      functions
+        f @25
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @29
+              type: Never?
+          returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_typeParameter_none() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = T;
+void f1(A a) {}
+void f2(A<int> a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: T
+      functions
+        f1 @23
+          reference: <testLibraryFragment>::@function::f1
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @28
+              type: dynamic
+          returnType: void
+        f2 @39
+          reference: <testLibraryFragment>::@function::f2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @49
+              type: int
+                alias: <testLibraryFragment>::@typeAlias::A
+                  typeArguments
+                    int
+          returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_typeParameter_question() async {
+    var library = await buildLibrary(r'''
+typedef A<T> = T?;
+void f1(A a) {}
+void f2(A<int> a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: T?
+      functions
+        f1 @24
+          reference: <testLibraryFragment>::@function::f1
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @29
+              type: dynamic
+          returnType: void
+        f2 @40
+          reference: <testLibraryFragment>::@function::f2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @50
+              type: int?
+                alias: <testLibraryFragment>::@typeAlias::A
+                  typeArguments
+                    int
+          returnType: void
+''');
+  }
+
+  test_typedef_nonFunction_using_void() async {
+    var library = await buildLibrary(r'''
+typedef A = void;
+void f(A a) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @8
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: void
+      functions
+        f @23
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional a @27
+              type: void
+          returnType: void
+''');
+  }
+
+  test_typedef_selfReference_recordType() async {
+    var library = await buildLibrary(r'''
+typedef F = (F, int) Function();
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        notSimplyBounded F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: (dynamic, int) Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: (dynamic, int)
+''');
+  }
+
+  test_typedefs() async {
+    var library = await buildLibrary('f() {} g() {}');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        g @7
+          reference: <testLibraryFragment>::@function::g
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  // TODO(scheglov): This is duplicate.
+  void _assertTypeStr(DartType type, String expected) {
+    var typeStr = type.getDisplayString();
+    expect(typeStr, expected);
+  }
+
+  void _assertTypeStrings(List<DartType> types, List<String> expected) {
+    var typeStringList = types.map((e) {
+      return e.getDisplayString();
+    }).toList();
+    expect(typeStringList, expected);
+  }
+}
+
+abstract class TypeAliasElementTest_augmentation extends ElementsBaseTest {
+  test_typeAlias_augments_class() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment typedef A = int;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+class A {}
+''');
+
+    configuration.withConstructors = false;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @31
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      typeAliases
+        augment A @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
+          aliasedType: int
+          augmentationTargetAny: <testLibraryFragment>::@class::A
+''');
+  }
+
+  test_typeAlias_augments_function() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment typedef A = int;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+void A() {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        A @30
+          reference: <testLibraryFragment>::@function::A
+          enclosingElement: <testLibraryFragment>
+          returnType: void
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      typeAliases
+        augment A @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
+          aliasedType: int
+          augmentationTargetAny: <testLibraryFragment>::@function::A
+''');
+  }
+
+  test_typeAlias_augments_getter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment typedef A = int;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+int get A => 0;
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static A @-1
+          reference: <testLibraryFragment>::@topLevelVariable::A
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static get A @33
+          reference: <testLibraryFragment>::@getter::A
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      typeAliases
+        augment A @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
+          aliasedType: int
+          augmentationTargetAny: <testLibraryFragment>::@getter::A
+''');
+  }
+
+  test_typeAlias_augments_nothing() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment typedef A = int;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+''');
+
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      typeAliases
+        augment A @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
+          aliasedType: int
+  exportedReferences
+  exportNamespace
+''');
+  }
+
+  test_typeAlias_augments_setter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment typedef A = int;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+set A(int _) {}
+''');
+
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        synthetic static A @-1
+          reference: <testLibraryFragment>::@topLevelVariable::A
+          enclosingElement: <testLibraryFragment>
+          type: int
+      accessors
+        static set A= @29
+          reference: <testLibraryFragment>::@setter::A
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _ @35
+              type: int
+          returnType: void
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      typeAliases
+        augment A @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
+          aliasedType: int
+          augmentationTargetAny: <testLibraryFragment>::@setter::A
+''');
+  }
+
+  test_typeAlias_augments_typeAlias() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+augment library 'test.dart';
+augment typedef A = int;
+''');
+
+    var library = await buildLibrary(r'''
+import augment 'a.dart';
+typedef A = int;
+''');
+
+    configuration.withExportScope = true;
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  augmentationImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      reference: <testLibrary>::@augmentation::package:test/a.dart
+      definingUnit: <testLibrary>::@fragment::package:test/a.dart
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        A @33
+          reference: <testLibraryFragment>::@typeAlias::A
+          aliasedType: int
+          augmentation: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
+      enclosingElement3: <testLibraryFragment>
+      typeAliases
+        augment A @45
+          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
+          aliasedType: int
+          augmentationTarget: <testLibraryFragment>::@typeAlias::A
+  exportedReferences
+    declared <testLibraryFragment>::@typeAlias::A
+  exportNamespace
+    A: <testLibraryFragment>::@typeAlias::A
+''');
+  }
+}
+
+@reflectiveTest
+class TypeAliasElementTest_augmentation_fromBytes
+    extends TypeAliasElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class TypeAliasElementTest_augmentation_keepLinking
+    extends TypeAliasElementTest_augmentation {
+  @override
+  bool get keepLinkingLibraries => true;
+}
+
+@reflectiveTest
+class TypeAliasElementTest_fromBytes extends TypeAliasElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class TypeAliasElementTest_keepLinking extends TypeAliasElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/type_inference_test.dart b/pkg/analyzer/test/src/summary/elements/type_inference_test.dart
new file mode 100644
index 0000000..9edd1ee
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/type_inference_test.dart
@@ -0,0 +1,5520 @@
+// Copyright (c) 2024, 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/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/context_collection_resolution.dart';
+import '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(TypeInferenceElementTest_keepLinking);
+    defineReflectiveTests(TypeInferenceElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class TypeInferenceElementTest extends ElementsBaseTest {
+  test_closure_generic() async {
+    var library = await buildLibrary(r'''
+final f = <U, V>(U x, V y) => y;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final f @6
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: V Function<U, V>(U, V)
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: V Function<U, V>(U, V)
+''');
+  }
+
+  test_closure_in_variable_declaration_in_part() async {
+    addSource('$testPackageLibPath/a.dart',
+        'part of lib; final f = (int i) => i.toDouble();');
+    var library = await buildLibrary('''
+library lib;
+part "a.dart";
+''');
+    checkElementText(library, r'''
+library
+  name: lib
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static final f @19
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::f
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: double Function(int)
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get f @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::f
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: double Function(int)
+''');
+  }
+
+  test_expr_invalid_typeParameter_asPrefix() async {
+    var library = await buildLibrary('''
+class C<T> {
+  final f = T.k;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          fields
+            final f @21
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: InvalidType
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: InvalidType
+''');
+  }
+
+  test_infer_generic_typedef_complex() async {
+    var library = await buildLibrary('''
+typedef F<T> = D<T,U> Function<U>();
+class C<V> {
+  const C(F<V> f);
+}
+class D<T,U> {}
+D<int,U> f<U>() => null;
+const x = const C(f);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @43
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant V @45
+              defaultType: dynamic
+          constructors
+            const @58
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional f @65
+                  type: D<V, U> Function<U>()
+                    alias: <testLibraryFragment>::@typeAlias::F
+                      typeArguments
+                        V
+        class D @77
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @79
+              defaultType: dynamic
+            covariant U @81
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            covariant T @10
+              defaultType: dynamic
+          aliasedType: D<T, U> Function<U>()
+          aliasedElement: GenericFunctionTypeElement
+            typeParameters
+              covariant U @31
+            returnType: D<T, U>
+      topLevelVariables
+        static const x @118
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: C<int>
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @122
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @128
+                  element: <testLibraryFragment>::@class::C
+                  type: C<int>
+                staticElement: ConstructorMember
+                  base: <testLibraryFragment>::@class::C::@constructor::new
+                  substitution: {V: int}
+              argumentList: ArgumentList
+                leftParenthesis: ( @129
+                arguments
+                  SimpleIdentifier
+                    token: f @130
+                    staticElement: <testLibraryFragment>::@function::f
+                    staticType: D<int, U> Function<U>()
+                rightParenthesis: ) @131
+              staticType: C<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: C<int>
+      functions
+        f @96
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U @98
+              defaultType: dynamic
+          returnType: D<int, U>
+''');
+  }
+
+  test_infer_generic_typedef_simple() async {
+    var library = await buildLibrary('''
+typedef F = D<T> Function<T>();
+class C {
+  const C(F f);
+}
+class D<T> {}
+D<T> f<T>() => null;
+const x = const C(f);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @38
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @50
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional f @54
+                  type: D<T> Function<T>()
+                    alias: <testLibraryFragment>::@typeAlias::F
+        class D @66
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @68
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: D<T> Function<T>()
+          aliasedElement: GenericFunctionTypeElement
+            typeParameters
+              covariant T @26
+            returnType: D<T>
+      topLevelVariables
+        static const x @101
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            InstanceCreationExpression
+              keyword: const @105
+              constructorName: ConstructorName
+                type: NamedType
+                  name: C @111
+                  element: <testLibraryFragment>::@class::C
+                  type: C
+                staticElement: <testLibraryFragment>::@class::C::@constructor::new
+              argumentList: ArgumentList
+                leftParenthesis: ( @112
+                arguments
+                  SimpleIdentifier
+                    token: f @113
+                    staticElement: <testLibraryFragment>::@function::f
+                    staticType: D<T> Function<T>()
+                rightParenthesis: ) @114
+              staticType: C
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+      functions
+        f @79
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @81
+              defaultType: dynamic
+          returnType: D<T>
+''');
+  }
+
+  test_infer_instanceCreation_fromArguments() async {
+    var library = await buildLibrary('''
+class A {}
+
+class B extends A {}
+
+class S<T extends A> {
+  S(T _);
+}
+
+var s = new S(new B());
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @18
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+        class S @40
+          reference: <testLibraryFragment>::@class::S
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @42
+              bound: A
+              defaultType: A
+          constructors
+            @59
+              reference: <testLibraryFragment>::@class::S::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::S
+              parameters
+                requiredPositional _ @63
+                  type: T
+      topLevelVariables
+        static s @74
+          reference: <testLibraryFragment>::@topLevelVariable::s
+          enclosingElement: <testLibraryFragment>
+          type: S<B>
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get s @-1
+          reference: <testLibraryFragment>::@getter::s
+          enclosingElement: <testLibraryFragment>
+          returnType: S<B>
+        synthetic static set s= @-1
+          reference: <testLibraryFragment>::@setter::s
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _s @-1
+              type: S<B>
+          returnType: void
+''');
+  }
+
+  test_infer_property_set() async {
+    var library = await buildLibrary('''
+class A {
+  B b;
+}
+class B {
+  C get c => null;
+  void set c(C value) {}
+}
+class C {}
+class D extends C {}
+var a = new A();
+var x = a.b.c ??= new D();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            b @14
+              reference: <testLibraryFragment>::@class::A::@field::b
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: B
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get b @-1
+              reference: <testLibraryFragment>::@class::A::@getter::b
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: B
+            synthetic set b= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::b
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _b @-1
+                  type: B
+              returnType: void
+        class B @25
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic c @-1
+              reference: <testLibraryFragment>::@class::B::@field::c
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: C
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+          accessors
+            get c @37
+              reference: <testLibraryFragment>::@class::B::@getter::c
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: C
+            set c= @59
+              reference: <testLibraryFragment>::@class::B::@setter::c
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional value @63
+                  type: C
+              returnType: void
+        class C @81
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class D @92
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          supertype: C
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+              superConstructor: <testLibraryFragment>::@class::C::@constructor::new
+      topLevelVariables
+        static a @111
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: A
+          shouldUseTypeForInitializerInference: false
+        static x @128
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: A
+        synthetic static set a= @-1
+          reference: <testLibraryFragment>::@setter::a
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _a @-1
+              type: A
+          returnType: void
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: C
+          returnType: void
+''');
+  }
+
+  test_inference_issue_32394() async {
+    // Test the type inference involved in dartbug.com/32394
+    var library = await buildLibrary('''
+var x = y.map((a) => a.toString());
+var y = [3];
+var z = x.toList();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static x @4
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Iterable<String>
+          shouldUseTypeForInitializerInference: false
+        static y @40
+          reference: <testLibraryFragment>::@topLevelVariable::y
+          enclosingElement: <testLibraryFragment>
+          type: List<int>
+          shouldUseTypeForInitializerInference: false
+        static z @53
+          reference: <testLibraryFragment>::@topLevelVariable::z
+          enclosingElement: <testLibraryFragment>
+          type: List<String>
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Iterable<String>
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: Iterable<String>
+          returnType: void
+        synthetic static get y @-1
+          reference: <testLibraryFragment>::@getter::y
+          enclosingElement: <testLibraryFragment>
+          returnType: List<int>
+        synthetic static set y= @-1
+          reference: <testLibraryFragment>::@setter::y
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _y @-1
+              type: List<int>
+          returnType: void
+        synthetic static get z @-1
+          reference: <testLibraryFragment>::@getter::z
+          enclosingElement: <testLibraryFragment>
+          returnType: List<String>
+        synthetic static set z= @-1
+          reference: <testLibraryFragment>::@setter::z
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _z @-1
+              type: List<String>
+          returnType: void
+''');
+  }
+
+  test_inference_map() async {
+    var library = await buildLibrary('''
+class C {
+  int p;
+}
+var x = <C>[];
+var y = x.map((c) => c.p);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            p @16
+              reference: <testLibraryFragment>::@class::C::@field::p
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get p @-1
+              reference: <testLibraryFragment>::@class::C::@getter::p
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int
+            synthetic set p= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::p
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _p @-1
+                  type: int
+              returnType: void
+      topLevelVariables
+        static x @25
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: List<C>
+          shouldUseTypeForInitializerInference: false
+        static y @40
+          reference: <testLibraryFragment>::@topLevelVariable::y
+          enclosingElement: <testLibraryFragment>
+          type: Iterable<int>
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: List<C>
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: List<C>
+          returnType: void
+        synthetic static get y @-1
+          reference: <testLibraryFragment>::@getter::y
+          enclosingElement: <testLibraryFragment>
+          returnType: Iterable<int>
+        synthetic static set y= @-1
+          reference: <testLibraryFragment>::@setter::y
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _y @-1
+              type: Iterable<int>
+          returnType: void
+''');
+  }
+
+  test_inferred_function_type_for_variable_in_generic_function() async {
+    // In the code below, `x` has an inferred type of `() => int`, with 2
+    // (unused) type parameters from the enclosing top level function.
+    var library = await buildLibrary('''
+f<U, V>() {
+  var x = () => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U @2
+              defaultType: dynamic
+            covariant V @5
+              defaultType: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_inferred_function_type_in_generic_class_constructor() async {
+    // In the code below, `() => () => 0` has an inferred return type of
+    // `() => int`, with 2 (unused) type parameters from the enclosing class.
+    var library = await buildLibrary('''
+class C<U, V> {
+  final x;
+  C() : x = (() => () => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U @8
+              defaultType: dynamic
+            covariant V @11
+              defaultType: dynamic
+          fields
+            final x @24
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            @29
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get x @-1
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_inferred_function_type_in_generic_class_getter() async {
+    // In the code below, `() => () => 0` has an inferred return type of
+    // `() => int`, with 2 (unused) type parameters from the enclosing class.
+    var library = await buildLibrary('''
+class C<U, V> {
+  get x => () => () => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U @8
+              defaultType: dynamic
+            covariant V @11
+              defaultType: dynamic
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            get x @22
+              reference: <testLibraryFragment>::@class::C::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: dynamic
+''');
+  }
+
+  test_inferred_function_type_in_generic_class_in_generic_method() async {
+    // In the code below, `() => () => 0` has an inferred return type of
+    // `() => int`, with 3 (unused) type parameters from the enclosing class
+    // and method.
+    var library = await buildLibrary('''
+class C<T> {
+  f<U, V>() {
+    print(() => () => 0);
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @15
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              typeParameters
+                covariant U @17
+                  defaultType: dynamic
+                covariant V @20
+                  defaultType: dynamic
+              returnType: dynamic
+''');
+  }
+
+  test_inferred_function_type_in_generic_class_setter() async {
+    // In the code below, `() => () => 0` has an inferred return type of
+    // `() => int`, with 2 (unused) type parameters from the enclosing class.
+    var library = await buildLibrary('''
+class C<U, V> {
+  void set x(value) {
+    print(() => () => 0);
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U @8
+              defaultType: dynamic
+            covariant V @11
+              defaultType: dynamic
+          fields
+            synthetic x @-1
+              reference: <testLibraryFragment>::@class::C::@field::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            set x= @27
+              reference: <testLibraryFragment>::@class::C::@setter::x
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional value @29
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_inferred_function_type_in_generic_closure() async {
+    // In the code below, `<U, V>() => () => 0` has an inferred return type of
+    // `() => int`, with 3 (unused) type parameters.
+    var library = await buildLibrary('''
+f<T>() {
+  print(/*<U, V>*/() => () => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @2
+              defaultType: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_inferred_generic_function_type_in_generic_closure() async {
+    // In the code below, `<U, V>() => <W, X, Y, Z>() => 0` has an inferred
+    // return type of `() => int`, with 7 (unused) type parameters.
+    var library = await buildLibrary('''
+f<T>() {
+  print(/*<U, V>*/() => /*<W, X, Y, Z>*/() => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @2
+              defaultType: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_inferred_type_could_not_infer() async {
+    var library = await buildLibrary(r'''
+class C<P extends num> {
+  factory C(Iterable<P> p) => C._();
+  C._();
+}
+
+var c = C([]);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant P @8
+              bound: num
+              defaultType: num
+          constructors
+            factory @35
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional p @49
+                  type: Iterable<P>
+            _ @66
+              reference: <testLibraryFragment>::@class::C::@constructor::_
+              enclosingElement: <testLibraryFragment>::@class::C
+              periodOffset: 65
+              nameEnd: 67
+      topLevelVariables
+        static c @78
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C<dynamic>
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C<dynamic>
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C<dynamic>
+          returnType: void
+''');
+  }
+
+  test_inferred_type_functionExpressionInvocation_oppositeOrder() async {
+    var library = await buildLibrary('''
+class A {
+  static final foo = bar(1.2);
+  static final bar = baz();
+
+  static int Function(double) baz() => (throw 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            static final foo @25
+              reference: <testLibraryFragment>::@class::A::@field::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: false
+            static final bar @56
+              reference: <testLibraryFragment>::@class::A::@field::bar
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int Function(double)
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic static get foo @-1
+              reference: <testLibraryFragment>::@class::A::@getter::foo
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+            synthetic static get bar @-1
+              reference: <testLibraryFragment>::@class::A::@getter::bar
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int Function(double)
+          methods
+            static baz @100
+              reference: <testLibraryFragment>::@class::A::@method::baz
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int Function(double)
+''');
+  }
+
+  test_inferred_type_inference_failure_on_function_invocation() async {
+    writeTestPackageAnalysisOptionsFile(
+      AnalysisOptionsFileConfig(
+        strictInference: true,
+      ),
+    );
+    var library = await buildLibrary(r'''
+int m<T>() => 1;
+var x = m();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static x @21
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int
+          returnType: void
+      functions
+        m @4
+          reference: <testLibraryFragment>::@function::m
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @6
+              defaultType: dynamic
+          returnType: int
+''');
+  }
+
+  test_inferred_type_inference_failure_on_generic_invocation() async {
+    writeTestPackageAnalysisOptionsFile(
+      AnalysisOptionsFileConfig(
+        strictInference: true,
+      ),
+    );
+    var library = await buildLibrary(r'''
+int Function<T>()? m = <T>() => 1;
+int Function<T>() n = <T>() => 2;
+var x = (m ?? n)();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static m @19
+          reference: <testLibraryFragment>::@topLevelVariable::m
+          enclosingElement: <testLibraryFragment>
+          type: int Function<T>()?
+          shouldUseTypeForInitializerInference: true
+        static n @53
+          reference: <testLibraryFragment>::@topLevelVariable::n
+          enclosingElement: <testLibraryFragment>
+          type: int Function<T>()
+          shouldUseTypeForInitializerInference: true
+        static x @73
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get m @-1
+          reference: <testLibraryFragment>::@getter::m
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function<T>()?
+        synthetic static set m= @-1
+          reference: <testLibraryFragment>::@setter::m
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _m @-1
+              type: int Function<T>()?
+          returnType: void
+        synthetic static get n @-1
+          reference: <testLibraryFragment>::@getter::n
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function<T>()
+        synthetic static set n= @-1
+          reference: <testLibraryFragment>::@setter::n
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _n @-1
+              type: int Function<T>()
+          returnType: void
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_inferred_type_inference_failure_on_instance_creation() async {
+    writeTestPackageAnalysisOptionsFile(
+      AnalysisOptionsFileConfig(
+        strictInference: true,
+      ),
+    );
+    var library = await buildLibrary(r'''
+import 'dart:collection';
+var m = HashMap();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:collection
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:collection
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static m @30
+          reference: <testLibraryFragment>::@topLevelVariable::m
+          enclosingElement: <testLibraryFragment>
+          type: HashMap<dynamic, dynamic>
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get m @-1
+          reference: <testLibraryFragment>::@getter::m
+          enclosingElement: <testLibraryFragment>
+          returnType: HashMap<dynamic, dynamic>
+        synthetic static set m= @-1
+          reference: <testLibraryFragment>::@setter::m
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _m @-1
+              type: HashMap<dynamic, dynamic>
+          returnType: void
+''');
+  }
+
+  test_inferred_type_initializer_cycle() async {
+    var library = await buildLibrary(r'''
+var a = b + 1;
+var b = c + 2;
+var c = a + 3;
+var d = 4;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static a @4
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [a, b, c]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static b @19
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [a, b, c]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static c @34
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [a, b, c]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static d @49
+          reference: <testLibraryFragment>::@topLevelVariable::d
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set a= @-1
+          reference: <testLibraryFragment>::@setter::a
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _a @-1
+              type: dynamic
+          returnType: void
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set b= @-1
+          reference: <testLibraryFragment>::@setter::b
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _b @-1
+              type: dynamic
+          returnType: void
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: dynamic
+          returnType: void
+        synthetic static get d @-1
+          reference: <testLibraryFragment>::@getter::d
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set d= @-1
+          reference: <testLibraryFragment>::@setter::d
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _d @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_inferred_type_is_typedef() async {
+    var library = await buildLibrary('typedef int F(String s);'
+        ' class C extends D { var v; }'
+        ' abstract class D { F get v; }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @31
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          fields
+            v @49
+              reference: <testLibraryFragment>::@class::C::@field::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int Function(String)
+                alias: <testLibraryFragment>::@typeAlias::F
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+          accessors
+            synthetic get v @-1
+              reference: <testLibraryFragment>::@class::C::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int Function(String)
+                alias: <testLibraryFragment>::@typeAlias::F
+            synthetic set v= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _v @-1
+                  type: int Function(String)
+                    alias: <testLibraryFragment>::@typeAlias::F
+              returnType: void
+        abstract class D @69
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic v @-1
+              reference: <testLibraryFragment>::@class::D::@field::v
+              enclosingElement: <testLibraryFragment>::@class::D
+              type: int Function(String)
+                alias: <testLibraryFragment>::@typeAlias::F
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          accessors
+            abstract get v @79
+              reference: <testLibraryFragment>::@class::D::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::D
+              returnType: int Function(String)
+                alias: <testLibraryFragment>::@typeAlias::F
+      typeAliases
+        functionTypeAliasBased F @12
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: int Function(String)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional s @21
+                type: String
+            returnType: int
+''');
+  }
+
+  test_inferred_type_nullability_class_ref_none() async {
+    addSource('$testPackageLibPath/a.dart', 'int f() => 0;');
+    var library = await buildLibrary('''
+import 'a.dart';
+var x = f();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static x @21
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_inferred_type_nullability_class_ref_question() async {
+    addSource('$testPackageLibPath/a.dart', 'int? f() => 0;');
+    var library = await buildLibrary('''
+import 'a.dart';
+var x = f();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static x @21
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int?
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int?
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int?
+          returnType: void
+''');
+  }
+
+  test_inferred_type_nullability_function_type_none() async {
+    addSource('$testPackageLibPath/a.dart', 'void Function() f() => () {};');
+    var library = await buildLibrary('''
+import 'a.dart';
+var x = f();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static x @21
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: void Function()
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: void Function()
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: void Function()
+          returnType: void
+''');
+  }
+
+  test_inferred_type_nullability_function_type_question() async {
+    addSource('$testPackageLibPath/a.dart', 'void Function()? f() => () {};');
+    var library = await buildLibrary('''
+import 'a.dart';
+var x = f();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static x @21
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: void Function()?
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: void Function()?
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: void Function()?
+          returnType: void
+''');
+  }
+
+  test_inferred_type_refers_to_bound_type_param() async {
+    var library = await buildLibrary('''
+class C<T> extends D<int, T> {
+  var v;
+}
+abstract class D<U, V> {
+  Map<V, U> get v;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          supertype: D<int, T>
+          fields
+            v @37
+              reference: <testLibraryFragment>::@class::C::@field::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: Map<T, int>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::D::@constructor::new
+                substitution: {U: int, V: T}
+          accessors
+            synthetic get v @-1
+              reference: <testLibraryFragment>::@class::C::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: Map<T, int>
+            synthetic set v= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _v @-1
+                  type: Map<T, int>
+              returnType: void
+        abstract class D @57
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant U @59
+              defaultType: dynamic
+            covariant V @62
+              defaultType: dynamic
+          fields
+            synthetic v @-1
+              reference: <testLibraryFragment>::@class::D::@field::v
+              enclosingElement: <testLibraryFragment>::@class::D
+              type: Map<V, U>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          accessors
+            abstract get v @83
+              reference: <testLibraryFragment>::@class::D::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::D
+              returnType: Map<V, U>
+''');
+  }
+
+  test_inferred_type_refers_to_function_typed_param_of_typedef() async {
+    var library = await buildLibrary('''
+typedef void F(int g(String s));
+h(F f) => null;
+var v = h((y) {});
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @13
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: void Function(int Function(String))
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional g @19
+                type: int Function(String)
+                parameters
+                  requiredPositional s @28
+                    type: String
+            returnType: void
+      topLevelVariables
+        static v @53
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: dynamic
+          returnType: void
+      functions
+        h @33
+          reference: <testLibraryFragment>::@function::h
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional f @37
+              type: void Function(int Function(String))
+                alias: <testLibraryFragment>::@typeAlias::F
+          returnType: dynamic
+''');
+  }
+
+  test_inferred_type_refers_to_function_typed_parameter_type_generic_class() async {
+    var library = await buildLibrary('''
+class C<T, U> extends D<U, int> {
+  void f(int x, g) {}
+}
+abstract class D<V, W> {
+  void f(int x, W g(V s));
+}''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          supertype: D<U, int>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::D::@constructor::new
+                substitution: {V: U, W: int}
+          methods
+            f @41
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional x @47
+                  type: int
+                requiredPositional g @50
+                  type: int Function(U)
+              returnType: void
+        abstract class D @73
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant V @75
+              defaultType: dynamic
+            covariant W @78
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          methods
+            abstract f @90
+              reference: <testLibraryFragment>::@class::D::@method::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              parameters
+                requiredPositional x @96
+                  type: int
+                requiredPositional g @101
+                  type: W Function(V)
+                  parameters
+                    requiredPositional s @105
+                      type: V
+              returnType: void
+''');
+  }
+
+  test_inferred_type_refers_to_function_typed_parameter_type_other_lib() async {
+    addSource('$testPackageLibPath/a.dart', '''
+import 'b.dart';
+abstract class D extends E {}
+''');
+    addSource('$testPackageLibPath/b.dart', '''
+abstract class E {
+  void f(int x, int g(String s));
+}
+''');
+    var library = await buildLibrary('''
+import 'a.dart';
+class C extends D {
+  void f(int x, g) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @23
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: package:test/a.dart::<fragment>::@class::D::@constructor::new
+          methods
+            f @44
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional x @50
+                  type: int
+                requiredPositional g @53
+                  type: int Function(String)
+              returnType: void
+''');
+  }
+
+  test_inferred_type_refers_to_method_function_typed_parameter_type() async {
+    var library = await buildLibrary('class C extends D { void f(int x, g) {} }'
+        ' abstract class D { void f(int x, int g(String s)); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+          methods
+            f @25
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional x @31
+                  type: int
+                requiredPositional g @34
+                  type: int Function(String)
+              returnType: void
+        abstract class D @57
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          methods
+            abstract f @66
+              reference: <testLibraryFragment>::@class::D::@method::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              parameters
+                requiredPositional x @72
+                  type: int
+                requiredPositional g @79
+                  type: int Function(String)
+                  parameters
+                    requiredPositional s @88
+                      type: String
+              returnType: void
+''');
+  }
+
+  test_inferred_type_refers_to_nested_function_typed_param() async {
+    var library = await buildLibrary('''
+f(void g(int x, void h())) => null;
+var v = f((x, y) {});
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static v @40
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: dynamic
+          returnType: void
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional g @7
+              type: void Function(int, void Function())
+              parameters
+                requiredPositional x @13
+                  type: int
+                requiredPositional h @21
+                  type: void Function()
+          returnType: dynamic
+''');
+  }
+
+  test_inferred_type_refers_to_nested_function_typed_param_named() async {
+    var library = await buildLibrary('''
+f({void g(int x, void h())}) => null;
+var v = f(g: (x, y) {});
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static v @42
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: dynamic
+          returnType: void
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalNamed default g @8
+              reference: <testLibraryFragment>::@function::f::@parameter::g
+              type: void Function(int, void Function())
+              parameters
+                requiredPositional x @14
+                  type: int
+                requiredPositional h @22
+                  type: void Function()
+          returnType: dynamic
+''');
+  }
+
+  test_inferred_type_refers_to_setter_function_typed_parameter_type() async {
+    var library = await buildLibrary('class C extends D { void set f(g) {} }'
+        ' abstract class D { void set f(int g(String s)); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          supertype: D
+          fields
+            synthetic f @-1
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int Function(String)
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
+          accessors
+            set f= @29
+              reference: <testLibraryFragment>::@class::C::@setter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional g @31
+                  type: int Function(String)
+              returnType: void
+        abstract class D @54
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          fields
+            synthetic f @-1
+              reference: <testLibraryFragment>::@class::D::@field::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              type: int Function(String)
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+          accessors
+            abstract set f= @67
+              reference: <testLibraryFragment>::@class::D::@setter::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              parameters
+                requiredPositional g @73
+                  type: int Function(String)
+                  parameters
+                    requiredPositional s @82
+                      type: String
+              returnType: void
+''');
+  }
+
+  test_inferredType_definedInSdkLibraryPart() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+import 'dart:async';
+class A {
+  m(Stream p) {}
+}
+''');
+    var library = await buildLibrary(r'''
+import 'a.dart';
+class B extends A {
+  m(p) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class B @23
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new
+          methods
+            m @39
+              reference: <testLibraryFragment>::@class::B::@method::m
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional p @41
+                  type: Stream<dynamic>
+              returnType: dynamic
+''');
+    ClassElement b = library.definingCompilationUnit.classes[0];
+    ParameterElement p = b.methods[0].parameters[0];
+    // This test should verify that we correctly record inferred types,
+    // when the type is defined in a part of an SDK library. So, test that
+    // the type is actually in a part.
+    var streamElement = (p.type as InterfaceType).element;
+    expect(streamElement.source, isNot(streamElement.library.source));
+  }
+
+  test_inferredType_implicitCreation() async {
+    var library = await buildLibrary(r'''
+class A {
+  A();
+  A.named();
+}
+var a1 = A();
+var a2 = A.named();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+            named @21
+              reference: <testLibraryFragment>::@class::A::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::A
+              periodOffset: 20
+              nameEnd: 26
+      topLevelVariables
+        static a1 @36
+          reference: <testLibraryFragment>::@topLevelVariable::a1
+          enclosingElement: <testLibraryFragment>
+          type: A
+          shouldUseTypeForInitializerInference: false
+        static a2 @50
+          reference: <testLibraryFragment>::@topLevelVariable::a2
+          enclosingElement: <testLibraryFragment>
+          type: A
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a1 @-1
+          reference: <testLibraryFragment>::@getter::a1
+          enclosingElement: <testLibraryFragment>
+          returnType: A
+        synthetic static set a1= @-1
+          reference: <testLibraryFragment>::@setter::a1
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _a1 @-1
+              type: A
+          returnType: void
+        synthetic static get a2 @-1
+          reference: <testLibraryFragment>::@getter::a2
+          enclosingElement: <testLibraryFragment>
+          returnType: A
+        synthetic static set a2= @-1
+          reference: <testLibraryFragment>::@setter::a2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _a2 @-1
+              type: A
+          returnType: void
+''');
+  }
+
+  test_inferredType_implicitCreation_prefixed() async {
+    addSource('$testPackageLibPath/foo.dart', '''
+class A {
+  A();
+  A.named();
+}
+''');
+    var library = await buildLibrary('''
+import 'foo.dart' as foo;
+var a1 = foo.A();
+var a2 = foo.A.named();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/foo.dart as foo @21
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    foo @21
+      reference: <testLibraryFragment>::@prefix::foo
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/foo.dart as foo @21
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        foo @21
+          reference: <testLibraryFragment>::@prefix::foo
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static a1 @30
+          reference: <testLibraryFragment>::@topLevelVariable::a1
+          enclosingElement: <testLibraryFragment>
+          type: A
+          shouldUseTypeForInitializerInference: false
+        static a2 @48
+          reference: <testLibraryFragment>::@topLevelVariable::a2
+          enclosingElement: <testLibraryFragment>
+          type: A
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a1 @-1
+          reference: <testLibraryFragment>::@getter::a1
+          enclosingElement: <testLibraryFragment>
+          returnType: A
+        synthetic static set a1= @-1
+          reference: <testLibraryFragment>::@setter::a1
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _a1 @-1
+              type: A
+          returnType: void
+        synthetic static get a2 @-1
+          reference: <testLibraryFragment>::@getter::a2
+          enclosingElement: <testLibraryFragment>
+          returnType: A
+        synthetic static set a2= @-1
+          reference: <testLibraryFragment>::@setter::a2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _a2 @-1
+              type: A
+          returnType: void
+''');
+  }
+
+  test_inferredType_usesSyntheticFunctionType_functionTypedParam() async {
+    // AnalysisContext does not set the enclosing element for the synthetic
+    // FunctionElement created for the [f, g] type argument.
+    var library = await buildLibrary('''
+int f(int x(String y)) => null;
+String g(int x(String y)) => null;
+var v = [f, g];
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static v @71
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: List<Object Function(int Function(String))>
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: List<Object Function(int Function(String))>
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: List<Object Function(int Function(String))>
+          returnType: void
+      functions
+        f @4
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional x @10
+              type: int Function(String)
+              parameters
+                requiredPositional y @19
+                  type: String
+          returnType: int
+        g @39
+          reference: <testLibraryFragment>::@function::g
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional x @45
+              type: int Function(String)
+              parameters
+                requiredPositional y @54
+                  type: String
+          returnType: String
+''');
+  }
+
+  test_inheritance_errors() async {
+    var library = await buildLibrary('''
+abstract class A {
+  int m();
+}
+
+abstract class B {
+  String m();
+}
+
+abstract class C implements A, B {}
+
+abstract class D extends C {
+  var f;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        abstract class A @15
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            abstract m @25
+              reference: <testLibraryFragment>::@class::A::@method::m
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+        abstract class B @48
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+          methods
+            abstract m @61
+              reference: <testLibraryFragment>::@class::B::@method::m
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: String
+        abstract class C @84
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          interfaces
+            A
+            B
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        abstract class D @121
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          supertype: C
+          fields
+            f @141
+              reference: <testLibraryFragment>::@class::D::@field::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              type: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+              superConstructor: <testLibraryFragment>::@class::C::@constructor::new
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::D::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              returnType: dynamic
+            synthetic set f= @-1
+              reference: <testLibraryFragment>::@class::D::@setter::f
+              enclosingElement: <testLibraryFragment>::@class::D
+              parameters
+                requiredPositional _f @-1
+                  type: dynamic
+              returnType: void
+''');
+  }
+
+  test_methodInvocation_implicitCall() async {
+    var library = await buildLibrary(r'''
+class A {
+  double call() => 0.0;
+}
+class B {
+  A a;
+}
+var c = new B().a();
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          methods
+            call @19
+              reference: <testLibraryFragment>::@class::A::@method::call
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: double
+        class B @42
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          fields
+            a @50
+              reference: <testLibraryFragment>::@class::B::@field::a
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+          accessors
+            synthetic get a @-1
+              reference: <testLibraryFragment>::@class::B::@getter::a
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: A
+            synthetic set a= @-1
+              reference: <testLibraryFragment>::@class::B::@setter::a
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional _a @-1
+                  type: A
+              returnType: void
+      topLevelVariables
+        static c @59
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: double
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: double
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: double
+          returnType: void
+''');
+  }
+
+  test_type_inference_assignmentExpression_references_onTopLevelVariable() async {
+    var library = await buildLibrary('''
+var a = () {
+  b += 0;
+  return 0;
+};
+var b = 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static a @4
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: int Function()
+          shouldUseTypeForInitializerInference: false
+        static b @42
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function()
+        synthetic static set a= @-1
+          reference: <testLibraryFragment>::@setter::a
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _a @-1
+              type: int Function()
+          returnType: void
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set b= @-1
+          reference: <testLibraryFragment>::@setter::b
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _b @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_type_inference_based_on_loadLibrary() async {
+    addSource('$testPackageLibPath/a.dart', '');
+    var library = await buildLibrary('''
+import 'a.dart' deferred as a;
+var x = a.loadLibrary;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart deferred as a @28
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    a @28
+      reference: <testLibraryFragment>::@prefix::a
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart deferred as a @28
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        a @28
+          reference: <testLibraryFragment>::@prefix::a
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static x @35
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Future<dynamic> Function()
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Future<dynamic> Function()
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: Future<dynamic> Function()
+          returnType: void
+''');
+  }
+
+  test_type_inference_closure_with_function_typed_parameter() async {
+    var library = await buildLibrary('''
+var x = (int f(String x)) => 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static x @4
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int Function(int Function(String))
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function(int Function(String))
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int Function(int Function(String))
+          returnType: void
+''');
+  }
+
+  test_type_inference_closure_with_function_typed_parameter_new() async {
+    var library = await buildLibrary('''
+var x = (int Function(String) f) => 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static x @4
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int Function(int Function(String))
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function(int Function(String))
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int Function(int Function(String))
+          returnType: void
+''');
+  }
+
+  test_type_inference_depends_on_exported_variable() async {
+    addSource('$testPackageLibPath/a.dart', 'export "b.dart";');
+    addSource('$testPackageLibPath/b.dart', 'var x = 0;');
+    var library = await buildLibrary('''
+import 'a.dart';
+var y = x;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static y @21
+          reference: <testLibraryFragment>::@topLevelVariable::y
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get y @-1
+          reference: <testLibraryFragment>::@getter::y
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set y= @-1
+          reference: <testLibraryFragment>::@setter::y
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _y @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_type_inference_field_cycle() async {
+    var library = await buildLibrary('''
+class A {
+  static final x = y + 1;
+  static final y = x + 1;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            static final x @25
+              reference: <testLibraryFragment>::@class::A::@field::x
+              enclosingElement: <testLibraryFragment>::@class::A
+              typeInferenceError: dependencyCycle
+                arguments: [x, y]
+              type: dynamic
+              shouldUseTypeForInitializerInference: false
+            static final y @51
+              reference: <testLibraryFragment>::@class::A::@field::y
+              enclosingElement: <testLibraryFragment>::@class::A
+              typeInferenceError: dependencyCycle
+                arguments: [x, y]
+              type: dynamic
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic static get x @-1
+              reference: <testLibraryFragment>::@class::A::@getter::x
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: dynamic
+            synthetic static get y @-1
+              reference: <testLibraryFragment>::@class::A::@getter::y
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: dynamic
+''');
+  }
+
+  test_type_inference_field_cycle_chain() async {
+    var library = await buildLibrary('''
+class A {
+  static final a = b.c;
+  static final b = A();
+  final c = a;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          fields
+            static final a @25
+              reference: <testLibraryFragment>::@class::A::@field::a
+              enclosingElement: <testLibraryFragment>::@class::A
+              typeInferenceError: dependencyCycle
+                arguments: [a, c]
+              type: dynamic
+              shouldUseTypeForInitializerInference: false
+            static final b @49
+              reference: <testLibraryFragment>::@class::A::@field::b
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: A
+              shouldUseTypeForInitializerInference: false
+            final c @66
+              reference: <testLibraryFragment>::@class::A::@field::c
+              enclosingElement: <testLibraryFragment>::@class::A
+              typeInferenceError: dependencyCycle
+                arguments: [a, c]
+              type: dynamic
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic static get a @-1
+              reference: <testLibraryFragment>::@class::A::@getter::a
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: dynamic
+            synthetic static get b @-1
+              reference: <testLibraryFragment>::@class::A::@getter::b
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: A
+            synthetic get c @-1
+              reference: <testLibraryFragment>::@class::A::@getter::c
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: dynamic
+''');
+  }
+
+  test_type_inference_field_depends_onFieldFormal() async {
+    var library = await buildLibrary('''
+class A<T> {
+  T value;
+
+  A(this.value);
+}
+
+class B {
+  var a = new A('');
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          fields
+            value @17
+              reference: <testLibraryFragment>::@class::A::@field::value
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: T
+          constructors
+            @27
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional final this.value @34
+                  type: T
+                  field: <testLibraryFragment>::@class::A::@field::value
+          accessors
+            synthetic get value @-1
+              reference: <testLibraryFragment>::@class::A::@getter::value
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: T
+            synthetic set value= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::value
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _value @-1
+                  type: T
+              returnType: void
+        class B @51
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          fields
+            a @61
+              reference: <testLibraryFragment>::@class::B::@field::a
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: A<String>
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+          accessors
+            synthetic get a @-1
+              reference: <testLibraryFragment>::@class::B::@getter::a
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: A<String>
+            synthetic set a= @-1
+              reference: <testLibraryFragment>::@class::B::@setter::a
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional _a @-1
+                  type: A<String>
+              returnType: void
+''');
+  }
+
+  test_type_inference_field_depends_onFieldFormal_withMixinApp() async {
+    var library = await buildLibrary('''
+class A<T> {
+  T value;
+
+  A(this.value);
+}
+
+class B<T> = A<T> with M;
+
+class C {
+  var a = new B(42);
+}
+
+mixin M {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          fields
+            value @17
+              reference: <testLibraryFragment>::@class::A::@field::value
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: T
+          constructors
+            @27
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional final this.value @34
+                  type: T
+                  field: <testLibraryFragment>::@class::A::@field::value
+          accessors
+            synthetic get value @-1
+              reference: <testLibraryFragment>::@class::A::@getter::value
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: T
+            synthetic set value= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::value
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _value @-1
+                  type: T
+              returnType: void
+        class alias B @51
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @53
+              defaultType: dynamic
+          supertype: A<T>
+          mixins
+            M
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional final value @-1
+                  type: T
+              constantInitializers
+                SuperConstructorInvocation
+                  superKeyword: super @0
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    arguments
+                      SimpleIdentifier
+                        token: value @-1
+                        staticElement: <testLibraryFragment>::@class::B::@constructor::new::@parameter::value
+                        staticType: T
+                    rightParenthesis: ) @0
+                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
+              superConstructor: ConstructorMember
+                base: <testLibraryFragment>::@class::A::@constructor::new
+                substitution: {T: T}
+        class C @78
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            a @88
+              reference: <testLibraryFragment>::@class::C::@field::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: B<int>
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get a @-1
+              reference: <testLibraryFragment>::@class::C::@getter::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: B<int>
+            synthetic set a= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::a
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _a @-1
+                  type: B<int>
+              returnType: void
+      mixins
+        mixin M @112
+          reference: <testLibraryFragment>::@mixin::M
+          enclosingElement: <testLibraryFragment>
+          superclassConstraints
+            Object
+''');
+  }
+
+  test_type_inference_fieldFormal_depends_onField() async {
+    var library = await buildLibrary('''
+class A<T> {
+  var f = 0;
+  A(this.f);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          fields
+            f @19
+              reference: <testLibraryFragment>::@class::A::@field::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: int
+              shouldUseTypeForInitializerInference: false
+          constructors
+            @28
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional final this.f @35
+                  type: int
+                  field: <testLibraryFragment>::@class::A::@field::f
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::A::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: int
+            synthetic set f= @-1
+              reference: <testLibraryFragment>::@class::A::@setter::f
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _f @-1
+                  type: int
+              returnType: void
+''');
+  }
+
+  test_type_inference_instanceCreation_notGeneric() async {
+    var library = await buildLibrary('''
+class A {
+  A(_);
+}
+final a = A(() => b);
+final b = A(() => a);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            @12
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+              parameters
+                requiredPositional _ @14
+                  type: dynamic
+      topLevelVariables
+        static final a @26
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [a, b]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static final b @48
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [a, b]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_type_inference_multiplyDefinedElement() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    addSource('$testPackageLibPath/b.dart', 'class C {}');
+    var library = await buildLibrary('''
+import 'a.dart';
+import 'b.dart';
+var v = C;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static v @38
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: InvalidType
+          returnType: void
+''');
+  }
+
+  test_type_inference_nested_function() async {
+    var library = await buildLibrary('''
+var x = (t) => (u) => t + u;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static x @4
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function(dynamic) Function(dynamic)
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function(dynamic) Function(dynamic)
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: dynamic Function(dynamic) Function(dynamic)
+          returnType: void
+''');
+  }
+
+  test_type_inference_nested_function_with_parameter_types() async {
+    var library = await buildLibrary('''
+var x = (int t) => (int u) => t + u;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static x @4
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: int Function(int) Function(int)
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function(int) Function(int)
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: int Function(int) Function(int)
+          returnType: void
+''');
+  }
+
+  test_type_inference_of_closure_with_default_value() async {
+    var library = await buildLibrary('''
+var x = ([y: 0]) => y;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static x @4
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function([dynamic])
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function([dynamic])
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: dynamic Function([dynamic])
+          returnType: void
+''');
+  }
+
+  test_type_inference_topVariable_cycle_afterChain() async {
+    // Note that `a` depends on `b`, but does not belong to the cycle.
+    var library = await buildLibrary('''
+final a = b;
+final b = c;
+final c = b;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static final b @19
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [b, c]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static final c @32
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [b, c]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_type_inference_topVariable_cycle_beforeChain() async {
+    // Note that `c` depends on `b`, but does not belong to the cycle.
+    var library = await buildLibrary('''
+final a = b;
+final b = a;
+final c = b;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [a, b]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static final b @19
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [a, b]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static final c @32
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_type_inference_topVariable_cycle_inCycle() async {
+    // `b` and `c` form a cycle.
+    // `a` and `d` form a different cycle, even though `a` references `b`.
+    var library = await buildLibrary('''
+final a = b + d;
+final b = c;
+final c = b;
+final d = a;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [a, d]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static final b @23
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [b, c]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static final c @36
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [b, c]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static final d @49
+          reference: <testLibraryFragment>::@topLevelVariable::d
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [a, d]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get d @-1
+          reference: <testLibraryFragment>::@getter::d
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_type_inference_topVariable_cycle_sharedElement() async {
+    // 1. Push `a`, start resolving.
+    // 2. Go to `b`, push, start resolving.
+    // 3. Go to `c`, push, start resolving.
+    // 4. Go to `b`, detect cycle `[b, c]`, set `dynamic`, return.
+    // 5. Pop `c`, already inferred (to `dynamic`), return.
+    // 6. Continue resolving `b` (it is not done, and not popped yet).
+    // 7. Go to `a`, detect cycle `[a, b]`, set `dynamic`, return.
+    var library = await buildLibrary('''
+final a = b;
+final b = c + a;
+final c = b;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final a @6
+          reference: <testLibraryFragment>::@topLevelVariable::a
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [a, b]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static final b @19
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [b, c]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+        static final c @36
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          typeInferenceError: dependencyCycle
+            arguments: [b, c]
+          type: dynamic
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get a @-1
+          reference: <testLibraryFragment>::@getter::a
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_type_inference_topVariable_depends_onFieldFormal() async {
+    var library = await buildLibrary('''
+class A {}
+
+class B extends A {}
+
+class C<T extends A> {
+  final T f;
+  const C(this.f);
+}
+
+final b = B();
+final c = C(b);
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        class B @18
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          supertype: A
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
+        class C @40
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @42
+              bound: A
+              defaultType: A
+          fields
+            final f @67
+              reference: <testLibraryFragment>::@class::C::@field::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: T
+          constructors
+            const @78
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional final this.f @85
+                  type: T
+                  field: <testLibraryFragment>::@class::C::@field::f
+          accessors
+            synthetic get f @-1
+              reference: <testLibraryFragment>::@class::C::@getter::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: T
+      topLevelVariables
+        static final b @98
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: B
+          shouldUseTypeForInitializerInference: false
+        static final c @113
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C<B>
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: B
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C<B>
+''');
+  }
+
+  test_type_inference_using_extension_getter() async {
+    var library = await buildLibrary('''
+extension on String {
+  int get foo => 0;
+}
+var v = 'a'.foo;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      extensions
+        <null> @-1
+          reference: <testLibraryFragment>::@extension::0
+          enclosingElement: <testLibraryFragment>
+          extendedType: String
+          fields
+            synthetic foo @-1
+              reference: <testLibraryFragment>::@extension::0::@field::foo
+              enclosingElement: <testLibraryFragment>::@extension::0
+              type: int
+          accessors
+            get foo @32
+              reference: <testLibraryFragment>::@extension::0::@getter::foo
+              enclosingElement: <testLibraryFragment>::@extension::0
+              returnType: int
+      topLevelVariables
+        static v @48
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: int
+          returnType: void
+''');
+  }
+
+  test_type_invalid_topLevelVariableElement_asType() async {
+    var library = await buildLibrary('''
+class C<T extends V> {}
+typedef V F(V p);
+V f(V p) {}
+V V2 = null;
+int V = 0;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: dynamic
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      typeAliases
+        functionTypeAliasBased F @34
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function(dynamic)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional p @38
+                type: dynamic
+            returnType: dynamic
+      topLevelVariables
+        static V2 @56
+          reference: <testLibraryFragment>::@topLevelVariable::V2
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+          shouldUseTypeForInitializerInference: true
+        static V @71
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: int
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get V2 @-1
+          reference: <testLibraryFragment>::@getter::V2
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set V2= @-1
+          reference: <testLibraryFragment>::@setter::V2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _V2 @-1
+              type: dynamic
+          returnType: void
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: int
+        synthetic static set V= @-1
+          reference: <testLibraryFragment>::@setter::V
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _V @-1
+              type: int
+          returnType: void
+      functions
+        f @44
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional p @48
+              type: dynamic
+          returnType: dynamic
+''');
+  }
+
+  test_type_invalid_topLevelVariableElement_asTypeArgument() async {
+    var library = await buildLibrary('''
+var V;
+static List<V> V2;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static V @4
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+        static V2 @22
+          reference: <testLibraryFragment>::@topLevelVariable::V2
+          enclosingElement: <testLibraryFragment>
+          type: List<dynamic>
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set V= @-1
+          reference: <testLibraryFragment>::@setter::V
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _V @-1
+              type: dynamic
+          returnType: void
+        synthetic static get V2 @-1
+          reference: <testLibraryFragment>::@getter::V2
+          enclosingElement: <testLibraryFragment>
+          returnType: List<dynamic>
+        synthetic static set V2= @-1
+          reference: <testLibraryFragment>::@setter::V2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _V2 @-1
+              type: List<dynamic>
+          returnType: void
+''');
+  }
+
+  test_type_invalid_typeParameter_asPrefix() async {
+    var library = await buildLibrary('''
+class C<T> {
+  m(T.K p) {}
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            m @15
+              reference: <testLibraryFragment>::@class::C::@method::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional p @21
+                  type: InvalidType
+              returnType: dynamic
+''');
+  }
+
+  test_type_invalid_unresolvedPrefix() async {
+    var library = await buildLibrary('''
+p.C v;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static v @4
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: InvalidType
+          returnType: void
+''');
+  }
+
+  test_type_never() async {
+    var library = await buildLibrary('Never d;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static d @6
+          reference: <testLibraryFragment>::@topLevelVariable::d
+          enclosingElement: <testLibraryFragment>
+          type: Never
+      accessors
+        synthetic static get d @-1
+          reference: <testLibraryFragment>::@getter::d
+          enclosingElement: <testLibraryFragment>
+          returnType: Never
+        synthetic static set d= @-1
+          reference: <testLibraryFragment>::@setter::d
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _d @-1
+              type: Never
+          returnType: void
+''');
+  }
+
+  test_type_param_ref_nullability_none() async {
+    var library = await buildLibrary('''
+class C<T> {
+  T t;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          fields
+            t @17
+              reference: <testLibraryFragment>::@class::C::@field::t
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: T
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get t @-1
+              reference: <testLibraryFragment>::@class::C::@getter::t
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: T
+            synthetic set t= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::t
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _t @-1
+                  type: T
+              returnType: void
+''');
+  }
+
+  test_type_param_ref_nullability_question() async {
+    var library = await buildLibrary('''
+class C<T> {
+  T? t;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          fields
+            t @18
+              reference: <testLibraryFragment>::@class::C::@field::t
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: T?
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get t @-1
+              reference: <testLibraryFragment>::@class::C::@getter::t
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: T?
+            synthetic set t= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::t
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _t @-1
+                  type: T?
+              returnType: void
+''');
+  }
+
+  test_type_reference_lib_to_lib() async {
+    var library = await buildLibrary('''
+class C {}
+enum E { v }
+typedef F();
+C c;
+E e;
+F f;''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      enums
+        enum E @16
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @20
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      typeAliases
+        functionTypeAliasBased F @32
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+      topLevelVariables
+        static c @39
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+        static e @44
+          reference: <testLibraryFragment>::@topLevelVariable::e
+          enclosingElement: <testLibraryFragment>
+          type: E
+        static f @49
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+            alias: <testLibraryFragment>::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibraryFragment>::@getter::e
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibraryFragment>::@setter::e
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+            alias: <testLibraryFragment>::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: <testLibraryFragment>::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_lib_to_part() async {
+    addSource('$testPackageLibPath/a.dart',
+        'part of l; class C {} enum E { v } typedef F();');
+    var library =
+        await buildLibrary('library l; part "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  name: l
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+      topLevelVariables
+        static c @28
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+        static e @33
+          reference: <testLibraryFragment>::@topLevelVariable::e
+          enclosingElement: <testLibraryFragment>
+          type: E
+        static f @38
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibraryFragment>::@getter::e
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibraryFragment>::@setter::e
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+          returnType: void
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class C @17
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::C
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::C::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::C
+      enums
+        enum E @27
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          supertype: Enum
+          fields
+            static const enumConstant v @31
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::v
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+                      type: E
+                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              returnType: List<E>
+      typeAliases
+        functionTypeAliasBased F @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+''');
+  }
+
+  test_type_reference_part_to_lib() async {
+    addSource('$testPackageLibPath/a.dart', 'part of l; C c; E e; F f;');
+    var library = await buildLibrary(
+        'library l; part "a.dart"; class C {} enum E { v } typedef F();');
+    checkElementText(library, r'''
+library
+  name: l
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+      classes
+        class C @32
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      enums
+        enum E @42
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @46
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      typeAliases
+        functionTypeAliasBased F @58
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @13
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::c
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: C
+        static e @18
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::e
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: E
+        static f @23
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::f
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: dynamic Function()
+            alias: <testLibraryFragment>::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::c
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::c
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::e
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::e
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::f
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: dynamic Function()
+            alias: <testLibraryFragment>::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::f
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: <testLibraryFragment>::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_part_to_other_part() async {
+    addSource('$testPackageLibPath/a.dart',
+        'part of l; class C {} enum E { v } typedef F();');
+    addSource('$testPackageLibPath/b.dart', 'part of l; C c; E e; F f;');
+    var library =
+        await buildLibrary('library l; part "a.dart"; part "b.dart";');
+    checkElementText(library, r'''
+library
+  name: l
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+    part_1
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+        part_1
+          uri: package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/b.dart
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class C @17
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::C
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::C::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::C
+      enums
+        enum E @27
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          supertype: Enum
+          fields
+            static const enumConstant v @31
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::v
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+                      type: E
+                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              returnType: List<E>
+      typeAliases
+        functionTypeAliasBased F @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+    <testLibrary>::@fragment::package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @13
+          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::c
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          type: C
+        static e @18
+          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::e
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          type: E
+        static f @23
+          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::f
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          type: dynamic Function()
+            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::c
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@setter::c
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::e
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@setter::e
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::f
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          returnType: dynamic Function()
+            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibrary>::@fragment::package:test/b.dart::@setter::f
+          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_part_to_part() async {
+    addSource('$testPackageLibPath/a.dart',
+        'part of l; class C {} enum E { v } typedef F(); C c; E e; F f;');
+    var library = await buildLibrary('library l; part "a.dart";');
+    checkElementText(library, r'''
+library
+  name: l
+  nameOffset: 8
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  parts
+    part_0
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      parts
+        part_0
+          uri: package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+          unit: <testLibrary>::@fragment::package:test/a.dart
+    <testLibrary>::@fragment::package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+      classes
+        class C @17
+          reference: <testLibrary>::@fragment::package:test/a.dart::@class::C
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          constructors
+            synthetic @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@class::C::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::C
+      enums
+        enum E @27
+          reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          supertype: Enum
+          fields
+            static const enumConstant v @31
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::v
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+                      type: E
+                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::values
+              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
+              returnType: List<E>
+      typeAliases
+        functionTypeAliasBased F @43
+          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+      topLevelVariables
+        static c @50
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::c
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: C
+        static e @55
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::e
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: E
+        static f @60
+          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::f
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          type: dynamic Function()
+            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::c
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::c
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::e
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::e
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::f
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          returnType: dynamic Function()
+            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::f
+          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_class() async {
+    var library = await buildLibrary('class C {} C c;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static c @13
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_class_with_type_arguments() async {
+    var library = await buildLibrary('class C<T, U> {} C<int, String> c;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static c @32
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C<int, String>
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C<int, String>
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C<int, String>
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_class_with_type_arguments_implicit() async {
+    var library = await buildLibrary('class C<T, U> {} C c;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static c @19
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C<dynamic, dynamic>
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C<dynamic, dynamic>
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C<dynamic, dynamic>
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_enum() async {
+    var library = await buildLibrary('enum E { v } E e;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      enums
+        enum E @5
+          reference: <testLibraryFragment>::@enum::E
+          enclosingElement: <testLibraryFragment>
+          supertype: Enum
+          fields
+            static const enumConstant v @9
+              reference: <testLibraryFragment>::@enum::E::@field::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: E
+              shouldUseTypeForInitializerInference: false
+              constantInitializer
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibraryFragment>::@enum::E
+                      type: E
+                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            synthetic static const values @-1
+              reference: <testLibraryFragment>::@enum::E::@field::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              type: List<E>
+              constantInitializer
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            synthetic const @-1
+              reference: <testLibraryFragment>::@enum::E::@constructor::new
+              enclosingElement: <testLibraryFragment>::@enum::E
+          accessors
+            synthetic static get v @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::v
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: E
+            synthetic static get values @-1
+              reference: <testLibraryFragment>::@enum::E::@getter::values
+              enclosingElement: <testLibraryFragment>::@enum::E
+              returnType: List<E>
+      topLevelVariables
+        static e @15
+          reference: <testLibraryFragment>::@topLevelVariable::e
+          enclosingElement: <testLibraryFragment>
+          type: E
+      accessors
+        synthetic static get e @-1
+          reference: <testLibraryFragment>::@getter::e
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibraryFragment>::@setter::e
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_import() async {
+    addSource(
+        '$testPackageLibPath/a.dart', 'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @19
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+        static e @24
+          reference: <testLibraryFragment>::@topLevelVariable::e
+          enclosingElement: <testLibraryFragment>
+          type: E
+        static f @29
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+            alias: package:test/a.dart::<fragment>::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibraryFragment>::@getter::e
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibraryFragment>::@setter::e
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+            alias: package:test/a.dart::<fragment>::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: package:test/a.dart::<fragment>::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_import_export() async {
+    addSource('$testPackageLibPath/a.dart', 'export "b.dart";');
+    addSource(
+        '$testPackageLibPath/b.dart', 'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @19
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+        static e @24
+          reference: <testLibraryFragment>::@topLevelVariable::e
+          enclosingElement: <testLibraryFragment>
+          type: E
+        static f @29
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+            alias: package:test/b.dart::<fragment>::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibraryFragment>::@getter::e
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibraryFragment>::@setter::e
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+            alias: package:test/b.dart::<fragment>::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: package:test/b.dart::<fragment>::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_import_export_export() async {
+    addSource('$testPackageLibPath/a.dart', 'export "b.dart";');
+    addSource('$testPackageLibPath/b.dart', 'export "c.dart";');
+    addSource(
+        '$testPackageLibPath/c.dart', 'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @19
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+        static e @24
+          reference: <testLibraryFragment>::@topLevelVariable::e
+          enclosingElement: <testLibraryFragment>
+          type: E
+        static f @29
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+            alias: package:test/c.dart::<fragment>::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibraryFragment>::@getter::e
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibraryFragment>::@setter::e
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+            alias: package:test/c.dart::<fragment>::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: package:test/c.dart::<fragment>::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_import_export_export_in_subdirs() async {
+    addSource('$testPackageLibPath/a/a.dart', 'export "b/b.dart";');
+    addSource('$testPackageLibPath/a/b/b.dart', 'export "../c/c.dart";');
+    addSource('$testPackageLibPath/a/c/c.dart',
+        'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a/a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @21
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+        static e @26
+          reference: <testLibraryFragment>::@topLevelVariable::e
+          enclosingElement: <testLibraryFragment>
+          type: E
+        static f @31
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+            alias: package:test/a/c/c.dart::<fragment>::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibraryFragment>::@getter::e
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibraryFragment>::@setter::e
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+            alias: package:test/a/c/c.dart::<fragment>::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: package:test/a/c/c.dart::<fragment>::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_import_export_in_subdirs() async {
+    addSource('$testPackageLibPath/a/a.dart', 'export "b/b.dart";');
+    addSource('$testPackageLibPath/a/b/b.dart',
+        'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a/a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @21
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+        static e @26
+          reference: <testLibraryFragment>::@topLevelVariable::e
+          enclosingElement: <testLibraryFragment>
+          type: E
+        static f @31
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+            alias: package:test/a/b/b.dart::<fragment>::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibraryFragment>::@getter::e
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibraryFragment>::@setter::e
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+            alias: package:test/a/b/b.dart::<fragment>::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: package:test/a/b/b.dart::<fragment>::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_import_part() async {
+    addSource('$testPackageLibPath/a.dart', 'library l; part "b.dart";');
+    addSource('$testPackageLibPath/b.dart',
+        'part of l; class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @19
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+        static e @24
+          reference: <testLibraryFragment>::@topLevelVariable::e
+          enclosingElement: <testLibraryFragment>
+          type: E
+        static f @29
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+            alias: package:test/a.dart::@fragment::package:test/b.dart::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibraryFragment>::@getter::e
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibraryFragment>::@setter::e
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+            alias: package:test/a.dart::@fragment::package:test/b.dart::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: package:test/a.dart::@fragment::package:test/b.dart::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_import_part2() async {
+    addSource('$testPackageLibPath/a.dart',
+        'library l; part "p1.dart"; part "p2.dart";');
+    addSource('$testPackageLibPath/p1.dart', 'part of l; class C1 {}');
+    addSource('$testPackageLibPath/p2.dart', 'part of l; class C2 {}');
+    var library = await buildLibrary('import "a.dart"; C1 c1; C2 c2;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c1 @20
+          reference: <testLibraryFragment>::@topLevelVariable::c1
+          enclosingElement: <testLibraryFragment>
+          type: C1
+        static c2 @27
+          reference: <testLibraryFragment>::@topLevelVariable::c2
+          enclosingElement: <testLibraryFragment>
+          type: C2
+      accessors
+        synthetic static get c1 @-1
+          reference: <testLibraryFragment>::@getter::c1
+          enclosingElement: <testLibraryFragment>
+          returnType: C1
+        synthetic static set c1= @-1
+          reference: <testLibraryFragment>::@setter::c1
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c1 @-1
+              type: C1
+          returnType: void
+        synthetic static get c2 @-1
+          reference: <testLibraryFragment>::@getter::c2
+          enclosingElement: <testLibraryFragment>
+          returnType: C2
+        synthetic static set c2= @-1
+          reference: <testLibraryFragment>::@setter::c2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c2 @-1
+              type: C2
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_import_part_in_subdir() async {
+    addSource('$testPackageLibPath/a/b.dart', 'library l; part "c.dart";');
+    addSource('$testPackageLibPath/a/c.dart',
+        'part of l; class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a/b.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @21
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+        static e @26
+          reference: <testLibraryFragment>::@topLevelVariable::e
+          enclosingElement: <testLibraryFragment>
+          type: E
+        static f @31
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+            alias: package:test/a/b.dart::@fragment::package:test/a/c.dart::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibraryFragment>::@getter::e
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibraryFragment>::@setter::e
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+            alias: package:test/a/b.dart::@fragment::package:test/a/c.dart::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: package:test/a/b.dart::@fragment::package:test/a/c.dart::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_import_relative() async {
+    addSource(
+        '$testPackageLibPath/a.dart', 'class C {} enum E { v } typedef F();');
+    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @19
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C
+        static e @24
+          reference: <testLibraryFragment>::@topLevelVariable::e
+          enclosingElement: <testLibraryFragment>
+          type: E
+        static f @29
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+            alias: package:test/a.dart::<fragment>::@typeAlias::F
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C
+          returnType: void
+        synthetic static get e @-1
+          reference: <testLibraryFragment>::@getter::e
+          enclosingElement: <testLibraryFragment>
+          returnType: E
+        synthetic static set e= @-1
+          reference: <testLibraryFragment>::@setter::e
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _e @-1
+              type: E
+          returnType: void
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+            alias: package:test/a.dart::<fragment>::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: package:test/a.dart::<fragment>::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_typedef() async {
+    var library = await buildLibrary('typedef F(); F f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+      topLevelVariables
+        static f @15
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function()
+            alias: <testLibraryFragment>::@typeAlias::F
+      accessors
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function()
+            alias: <testLibraryFragment>::@typeAlias::F
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function()
+                alias: <testLibraryFragment>::@typeAlias::F
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_typedef_with_type_arguments() async {
+    var library =
+        await buildLibrary('typedef U F<T, U>(T t); F<int, String> f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @10
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @12
+              defaultType: dynamic
+            covariant U @15
+              defaultType: dynamic
+          aliasedType: U Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional t @20
+                type: T
+            returnType: U
+      topLevelVariables
+        static f @39
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: String Function(int)
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                int
+                String
+      accessors
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: String Function(int)
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                int
+                String
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: String Function(int)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    int
+                    String
+          returnType: void
+''');
+  }
+
+  test_type_reference_to_typedef_with_type_arguments_implicit() async {
+    var library = await buildLibrary('typedef U F<T, U>(T t); F f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @10
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @12
+              defaultType: dynamic
+            covariant U @15
+              defaultType: dynamic
+          aliasedType: U Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional t @20
+                type: T
+            returnType: U
+      topLevelVariables
+        static f @26
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function(dynamic)
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                dynamic
+                dynamic
+      accessors
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function(dynamic)
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                dynamic
+                dynamic
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function(dynamic)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    dynamic
+                    dynamic
+          returnType: void
+''');
+  }
+}
+
+@reflectiveTest
+class TypeInferenceElementTest_fromBytes extends TypeInferenceElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class TypeInferenceElementTest_keepLinking extends TypeInferenceElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements/types_test.dart b/pkg/analyzer/test/src/summary/elements/types_test.dart
new file mode 100644
index 0000000..a03ee9e
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/elements/types_test.dart
@@ -0,0 +1,2176 @@
+// Copyright (c) 2024, 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.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../dart/resolution/node_text_expectations.dart';
+import '../elements_base.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(TypesElementTest_keepLinking);
+    defineReflectiveTests(TypesElementTest_fromBytes);
+    defineReflectiveTests(UpdateNodeTextExpectations);
+  });
+}
+
+abstract class TypesElementTest extends ElementsBaseTest {
+  test_closure_executable_with_return_type_from_closure() async {
+    var library = await buildLibrary('''
+f() {
+  print(() {});
+  print(() => () => 0);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @0
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_executable_parameter_type_typedef() async {
+    var library = await buildLibrary(r'''
+typedef F(int p);
+main(F f) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          aliasedType: dynamic Function(int)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional p @14
+                type: int
+            returnType: dynamic
+      functions
+        main @18
+          reference: <testLibraryFragment>::@function::main
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional f @25
+              type: dynamic Function(int)
+                alias: <testLibraryFragment>::@typeAlias::F
+          returnType: dynamic
+''');
+  }
+
+  test_futureOr() async {
+    var library = await buildLibrary('import "dart:async"; FutureOr<int> x;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static x @35
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: FutureOr<int>
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: FutureOr<int>
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: FutureOr<int>
+          returnType: void
+''');
+    var variables = library.definingCompilationUnit.topLevelVariables;
+    expect(variables, hasLength(1));
+    _assertTypeStr(variables[0].type, 'FutureOr<int>');
+  }
+
+  test_futureOr_const() async {
+    var library =
+        await buildLibrary('import "dart:async"; const x = FutureOr;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static const x @27
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: Type
+          shouldUseTypeForInitializerInference: false
+          constantInitializer
+            SimpleIdentifier
+              token: FutureOr @31
+              staticElement: dart:async::<fragment>::@class::FutureOr
+              staticType: Type
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: Type
+''');
+    var variables = library.definingCompilationUnit.topLevelVariables;
+    expect(variables, hasLength(1));
+    var x = variables[0] as ConstTopLevelVariableElementImpl;
+    _assertTypeStr(x.type, 'Type');
+    expect(x.constantInitializer.toString(), 'FutureOr');
+  }
+
+  test_futureOr_inferred() async {
+    var library = await buildLibrary('''
+import "dart:async";
+FutureOr<int> f() => null;
+var x = f();
+var y = x.then((z) => z.asDouble());
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static x @52
+          reference: <testLibraryFragment>::@topLevelVariable::x
+          enclosingElement: <testLibraryFragment>
+          type: FutureOr<int>
+          shouldUseTypeForInitializerInference: false
+        static y @65
+          reference: <testLibraryFragment>::@topLevelVariable::y
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get x @-1
+          reference: <testLibraryFragment>::@getter::x
+          enclosingElement: <testLibraryFragment>
+          returnType: FutureOr<int>
+        synthetic static set x= @-1
+          reference: <testLibraryFragment>::@setter::x
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _x @-1
+              type: FutureOr<int>
+          returnType: void
+        synthetic static get y @-1
+          reference: <testLibraryFragment>::@getter::y
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+        synthetic static set y= @-1
+          reference: <testLibraryFragment>::@setter::y
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _y @-1
+              type: InvalidType
+          returnType: void
+      functions
+        f @35
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: FutureOr<int>
+''');
+    var variables = library.definingCompilationUnit.topLevelVariables;
+    expect(variables, hasLength(2));
+    var x = variables[0];
+    expect(x.name, 'x');
+    var y = variables[1];
+    expect(y.name, 'y');
+    _assertTypeStr(x.type, 'FutureOr<int>');
+    _assertTypeStr(y.type, 'InvalidType');
+  }
+
+  test_generic_gClass_gMethodStatic() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  static void m<V, W>(V v, W w) {
+    void f<X, Y>(V v, W w, X x, Y y) {
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            static m @30
+              reference: <testLibraryFragment>::@class::C::@method::m
+              enclosingElement: <testLibraryFragment>::@class::C
+              typeParameters
+                covariant V @32
+                  defaultType: dynamic
+                covariant W @35
+                  defaultType: dynamic
+              parameters
+                requiredPositional v @40
+                  type: V
+                requiredPositional w @45
+                  type: W
+              returnType: void
+''');
+  }
+
+  test_implicitCallTearoff() async {
+    var library = await buildLibrary(r'''
+class C {
+  void call() {}
+}
+
+class D {
+  const D(C c) : this.named(c);
+
+  const D.named(void Function() f);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            call @17
+              reference: <testLibraryFragment>::@class::C::@method::call
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: void
+        class D @36
+          reference: <testLibraryFragment>::@class::D
+          enclosingElement: <testLibraryFragment>
+          constructors
+            const @48
+              reference: <testLibraryFragment>::@class::D::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::D
+              parameters
+                requiredPositional c @52
+                  type: C
+              constantInitializers
+                RedirectingConstructorInvocation
+                  thisKeyword: this @57
+                  period: . @61
+                  constructorName: SimpleIdentifier
+                    token: named @62
+                    staticElement: <testLibraryFragment>::@class::D::@constructor::named
+                    staticType: null
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @67
+                    arguments
+                      ImplicitCallReference
+                        expression: SimpleIdentifier
+                          token: c @68
+                          staticElement: <testLibraryFragment>::@class::D::@constructor::new::@parameter::c
+                          staticType: C
+                        staticElement: <testLibraryFragment>::@class::C::@method::call
+                        staticType: void Function()
+                    rightParenthesis: ) @69
+                  staticElement: <testLibraryFragment>::@class::D::@constructor::named
+              redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::named
+            const named @83
+              reference: <testLibraryFragment>::@class::D::@constructor::named
+              enclosingElement: <testLibraryFragment>::@class::D
+              periodOffset: 82
+              nameEnd: 88
+              parameters
+                requiredPositional f @105
+                  type: void Function()
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure() async {
+    var library = await buildLibrary('var v = () => 0;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static v @4
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int Function()
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function()
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: int Function()
+          returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_await_dynamic() async {
+    var library = await buildLibrary('var v = (f) async => await f;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static v @4
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: Future<dynamic> Function(dynamic)
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: Future<dynamic> Function(dynamic)
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: Future<dynamic> Function(dynamic)
+          returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_await_future3_int() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+var v = (Future<Future<Future<int>>> f) async => await f;
+''');
+    // The analyzer type system over-flattens - see dartbug.com/31887
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static v @25
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: Future<int> Function(Future<Future<Future<int>>>)
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: Future<int> Function(Future<Future<Future<int>>>)
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: Future<int> Function(Future<Future<Future<int>>>)
+          returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_await_future_int() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+var v = (Future<int> f) async => await f;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static v @25
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: Future<int> Function(Future<int>)
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: Future<int> Function(Future<int>)
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: Future<int> Function(Future<int>)
+          returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_await_future_noArg() async {
+    var library = await buildLibrary(r'''
+import 'dart:async';
+var v = (Future f) async => await f;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static v @25
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: Future<dynamic> Function(Future<dynamic>)
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: Future<dynamic> Function(Future<dynamic>)
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: Future<dynamic> Function(Future<dynamic>)
+          returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_field() async {
+    var library = await buildLibrary('''
+class C {
+  var v = () => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            v @16
+              reference: <testLibraryFragment>::@class::C::@field::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int Function()
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get v @-1
+              reference: <testLibraryFragment>::@class::C::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int Function()
+            synthetic set v= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _v @-1
+                  type: int Function()
+              returnType: void
+''');
+  }
+
+  test_initializer_executable_with_return_type_from_closure_local() async {
+    var library = await buildLibrary('''
+void f() {
+  int u = 0;
+  var v = () => 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: void
+''');
+  }
+
+  test_instanceInference_operator_equal_from() async {
+    addSource('$testPackageLibPath/nullSafe.dart', r'''
+class NullSafeDefault {
+  bool operator==(other) => false;
+}
+class NullSafeObject {
+  bool operator==(Object other) => false;
+}
+class NullSafeInt {
+  bool operator==(int other) => false;
+}
+''');
+    var library = await buildLibrary(r'''
+import 'nullSafe.dart';
+class X1 extends NullSafeDefault {
+  bool operator==(other) => false;
+}
+class X2 extends NullSafeObject {
+  bool operator==(other) => false;
+}
+class X3 extends NullSafeInt {
+  bool operator==(other) => false;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/nullSafe.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/nullSafe.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class X1 @30
+          reference: <testLibraryFragment>::@class::X1
+          enclosingElement: <testLibraryFragment>
+          supertype: NullSafeDefault
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X1::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X1
+              superConstructor: package:test/nullSafe.dart::<fragment>::@class::NullSafeDefault::@constructor::new
+          methods
+            == @74
+              reference: <testLibraryFragment>::@class::X1::@method::==
+              enclosingElement: <testLibraryFragment>::@class::X1
+              parameters
+                requiredPositional other @77
+                  type: Object
+              returnType: bool
+        class X2 @102
+          reference: <testLibraryFragment>::@class::X2
+          enclosingElement: <testLibraryFragment>
+          supertype: NullSafeObject
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X2::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X2
+              superConstructor: package:test/nullSafe.dart::<fragment>::@class::NullSafeObject::@constructor::new
+          methods
+            == @145
+              reference: <testLibraryFragment>::@class::X2::@method::==
+              enclosingElement: <testLibraryFragment>::@class::X2
+              parameters
+                requiredPositional other @148
+                  type: Object
+              returnType: bool
+        class X3 @173
+          reference: <testLibraryFragment>::@class::X3
+          enclosingElement: <testLibraryFragment>
+          supertype: NullSafeInt
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::X3::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::X3
+              superConstructor: package:test/nullSafe.dart::<fragment>::@class::NullSafeInt::@constructor::new
+          methods
+            == @213
+              reference: <testLibraryFragment>::@class::X3::@method::==
+              enclosingElement: <testLibraryFragment>::@class::X3
+              parameters
+                requiredPositional other @216
+                  type: int
+              returnType: bool
+''');
+  }
+
+  test_instantiateToBounds_boundRefersToEarlierTypeArgument() async {
+    var library = await buildLibrary('''
+class C<S extends num, T extends C<S, T>> {}
+C c;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant S @8
+              bound: num
+              defaultType: num
+            covariant T @23
+              bound: C<S, T>
+              defaultType: C<num, dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static c @47
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C<num, C<num, dynamic>>
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C<num, C<num, dynamic>>
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C<num, C<num, dynamic>>
+          returnType: void
+''');
+  }
+
+  test_instantiateToBounds_boundRefersToItself() async {
+    var library = await buildLibrary('''
+class C<T extends C<T>> {}
+C c;
+var c2 = new C();
+class B {
+  var c3 = new C();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: C<T>
+              defaultType: C<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+        class B @56
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          fields
+            c3 @66
+              reference: <testLibraryFragment>::@class::B::@field::c3
+              enclosingElement: <testLibraryFragment>::@class::B
+              type: C<C<Object?>>
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+          accessors
+            synthetic get c3 @-1
+              reference: <testLibraryFragment>::@class::B::@getter::c3
+              enclosingElement: <testLibraryFragment>::@class::B
+              returnType: C<C<Object?>>
+            synthetic set c3= @-1
+              reference: <testLibraryFragment>::@class::B::@setter::c3
+              enclosingElement: <testLibraryFragment>::@class::B
+              parameters
+                requiredPositional _c3 @-1
+                  type: C<C<Object?>>
+              returnType: void
+      topLevelVariables
+        static c @29
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C<C<dynamic>>
+        static c2 @36
+          reference: <testLibraryFragment>::@topLevelVariable::c2
+          enclosingElement: <testLibraryFragment>
+          type: C<C<Object?>>
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C<C<dynamic>>
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C<C<dynamic>>
+          returnType: void
+        synthetic static get c2 @-1
+          reference: <testLibraryFragment>::@getter::c2
+          enclosingElement: <testLibraryFragment>
+          returnType: C<C<Object?>>
+        synthetic static set c2= @-1
+          reference: <testLibraryFragment>::@setter::c2
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c2 @-1
+              type: C<C<Object?>>
+          returnType: void
+''');
+  }
+
+  test_instantiateToBounds_boundRefersToLaterTypeArgument() async {
+    var library = await buildLibrary('''
+class C<T extends C<T, U>, U extends num> {}
+C c;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        notSimplyBounded class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: C<T, U>
+              defaultType: C<dynamic, num>
+            covariant U @27
+              bound: num
+              defaultType: num
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static c @47
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C<C<dynamic, num>, num>
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C<C<dynamic, num>, num>
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C<C<dynamic, num>, num>
+          returnType: void
+''');
+  }
+
+  test_instantiateToBounds_functionTypeAlias_reexported() async {
+    addSource('$testPackageLibPath/a.dart', r'''
+class O {}
+typedef T F<T extends O>(T p);
+''');
+    addSource('$testPackageLibPath/b.dart', r'''
+export 'a.dart' show F;
+''');
+    var library = await buildLibrary('''
+import 'b.dart';
+class C {
+  F f() => null;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @23
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            f @31
+              reference: <testLibraryFragment>::@class::C::@method::f
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: O Function(O)
+                alias: package:test/a.dart::<fragment>::@typeAlias::F
+                  typeArguments
+                    O
+''');
+  }
+
+  test_instantiateToBounds_functionTypeAlias_simple() async {
+    var library = await buildLibrary('''
+typedef F<T extends num>(T p);
+F f;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        functionTypeAliasBased F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @10
+              bound: num
+              defaultType: num
+          aliasedType: dynamic Function(T)
+          aliasedElement: GenericFunctionTypeElement
+            parameters
+              requiredPositional p @27
+                type: T
+            returnType: dynamic
+      topLevelVariables
+        static f @33
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: dynamic Function(num)
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                num
+      accessors
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic Function(num)
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                num
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: dynamic Function(num)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    num
+          returnType: void
+''');
+  }
+
+  test_instantiateToBounds_genericFunctionAsBound() async {
+    var library = await buildLibrary('''
+class A<T> {}
+class B<T extends int Function(), U extends A<T>> {}
+B b;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+        notSimplyBounded class B @20
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @22
+              bound: int Function()
+              defaultType: int Function()
+            covariant U @48
+              bound: A<T>
+              defaultType: A<int Function()>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+      topLevelVariables
+        static b @69
+          reference: <testLibraryFragment>::@topLevelVariable::b
+          enclosingElement: <testLibraryFragment>
+          type: B<int Function(), A<int Function()>>
+      accessors
+        synthetic static get b @-1
+          reference: <testLibraryFragment>::@getter::b
+          enclosingElement: <testLibraryFragment>
+          returnType: B<int Function(), A<int Function()>>
+        synthetic static set b= @-1
+          reference: <testLibraryFragment>::@setter::b
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _b @-1
+              type: B<int Function(), A<int Function()>>
+          returnType: void
+''');
+  }
+
+  test_instantiateToBounds_genericTypeAlias_simple() async {
+    var library = await buildLibrary('''
+typedef F<T extends num> = S Function<S>(T p);
+F f;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      typeAliases
+        F @8
+          reference: <testLibraryFragment>::@typeAlias::F
+          typeParameters
+            contravariant T @10
+              bound: num
+              defaultType: num
+          aliasedType: S Function<S>(T)
+          aliasedElement: GenericFunctionTypeElement
+            typeParameters
+              covariant S @38
+            parameters
+              requiredPositional p @43
+                type: T
+            returnType: S
+      topLevelVariables
+        static f @49
+          reference: <testLibraryFragment>::@topLevelVariable::f
+          enclosingElement: <testLibraryFragment>
+          type: S Function<S>(num)
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                num
+      accessors
+        synthetic static get f @-1
+          reference: <testLibraryFragment>::@getter::f
+          enclosingElement: <testLibraryFragment>
+          returnType: S Function<S>(num)
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                num
+        synthetic static set f= @-1
+          reference: <testLibraryFragment>::@setter::f
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _f @-1
+              type: S Function<S>(num)
+                alias: <testLibraryFragment>::@typeAlias::F
+                  typeArguments
+                    num
+          returnType: void
+''');
+  }
+
+  test_instantiateToBounds_issue38498() async {
+    var library = await buildLibrary('''
+class A<R extends B> {
+  final values = <B>[];
+}
+class B<T extends num> {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class A @6
+          reference: <testLibraryFragment>::@class::A
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant R @8
+              bound: B<num>
+              defaultType: B<num>
+          fields
+            final values @31
+              reference: <testLibraryFragment>::@class::A::@field::values
+              enclosingElement: <testLibraryFragment>::@class::A
+              type: List<B<num>>
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::A::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::A
+          accessors
+            synthetic get values @-1
+              reference: <testLibraryFragment>::@class::A::@getter::values
+              enclosingElement: <testLibraryFragment>::@class::A
+              returnType: List<B<num>>
+        class B @55
+          reference: <testLibraryFragment>::@class::B
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @57
+              bound: num
+              defaultType: num
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::B::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::B
+''');
+  }
+
+  test_instantiateToBounds_simple() async {
+    var library = await buildLibrary('''
+class C<T extends num> {}
+C c;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              bound: num
+              defaultType: num
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+      topLevelVariables
+        static c @28
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: C<num>
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: C<num>
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: C<num>
+          returnType: void
+''');
+  }
+
+  test_invalid_importPrefix_asTypeArgument() async {
+    var library = await buildLibrary('''
+import 'dart:async' as ppp;
+class C {
+  List<ppp> v;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:async as ppp @23
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    ppp @23
+      reference: <testLibraryFragment>::@prefix::ppp
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:async as ppp @23
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        ppp @23
+          reference: <testLibraryFragment>::@prefix::ppp
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      classes
+        class C @34
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          fields
+            v @50
+              reference: <testLibraryFragment>::@class::C::@field::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: List<dynamic>
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get v @-1
+              reference: <testLibraryFragment>::@class::C::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: List<dynamic>
+            synthetic set v= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _v @-1
+                  type: List<dynamic>
+              returnType: void
+''');
+  }
+
+  test_invalid_nameConflict_imported() async {
+    addSource('$testPackageLibPath/a.dart', 'V() {}');
+    addSource('$testPackageLibPath/b.dart', 'V() {}');
+    var library = await buildLibrary('''
+import 'a.dart';
+import 'b.dart';
+foo([p = V]) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/a.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+    package:test/b.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/a.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+        package:test/b.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      functions
+        foo @34
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalPositional default p @39
+              type: dynamic
+              constantInitializer
+                SimpleIdentifier
+                  token: V @43
+                  staticElement: <null>
+                  staticType: InvalidType
+          returnType: dynamic
+''');
+  }
+
+  test_invalid_nameConflict_imported_exported() async {
+    addSource('$testPackageLibPath/a.dart', 'V() {}');
+    addSource('$testPackageLibPath/b.dart', 'V() {}');
+    addSource('$testPackageLibPath/c.dart', r'''
+export 'a.dart';
+export 'b.dart';
+''');
+    var library = await buildLibrary('''
+import 'c.dart';
+foo([p = V]) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/c.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/c.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      functions
+        foo @17
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalPositional default p @22
+              type: dynamic
+              constantInitializer
+                SimpleIdentifier
+                  token: V @26
+                  staticElement: package:test/a.dart::<fragment>::@function::V
+                  staticType: dynamic Function()
+          returnType: dynamic
+''');
+  }
+
+  test_invalid_nameConflict_local() async {
+    var library = await buildLibrary('''
+foo([p = V]) {}
+V() {}
+var V;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static V @27
+          reference: <testLibraryFragment>::@topLevelVariable::V
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        synthetic static get V @-1
+          reference: <testLibraryFragment>::@getter::V
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set V= @-1
+          reference: <testLibraryFragment>::@setter::V
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _V @-1
+              type: dynamic
+          returnType: void
+      functions
+        foo @0
+          reference: <testLibraryFragment>::@function::foo
+          enclosingElement: <testLibraryFragment>
+          parameters
+            optionalPositional default p @5
+              type: dynamic
+              constantInitializer
+                SimpleIdentifier
+                  token: V @9
+                  staticElement: <testLibraryFragment>::@getter::V
+                  staticType: dynamic
+          returnType: dynamic
+        V @16
+          reference: <testLibraryFragment>::@function::V
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+''');
+  }
+
+  test_nameConflict_exportedAndLocal() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    addSource('$testPackageLibPath/c.dart', '''
+export 'a.dart';
+class C {}
+''');
+    var library = await buildLibrary('''
+import 'c.dart';
+C v = null;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/c.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/c.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static v @19
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: C
+          returnType: void
+''');
+  }
+
+  test_nameConflict_exportedAndLocal_exported() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    addSource('$testPackageLibPath/c.dart', '''
+export 'a.dart';
+class C {}
+''');
+    addSource('$testPackageLibPath/d.dart', 'export "c.dart";');
+    var library = await buildLibrary('''
+import 'd.dart';
+C v = null;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/d.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/d.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static v @19
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: C
+          returnType: void
+''');
+  }
+
+  test_nameConflict_exportedAndParted() async {
+    addSource('$testPackageLibPath/a.dart', 'class C {}');
+    addSource('$testPackageLibPath/b.dart', '''
+part of lib;
+class C {}
+''');
+    addSource('$testPackageLibPath/c.dart', '''
+library lib;
+export 'a.dart';
+part 'b.dart';
+''');
+    var library = await buildLibrary('''
+import 'c.dart';
+C v = null;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    package:test/c.dart
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        package:test/c.dart
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static v @19
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: C
+          shouldUseTypeForInitializerInference: true
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: C
+        synthetic static set v= @-1
+          reference: <testLibraryFragment>::@setter::v
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _v @-1
+              type: C
+          returnType: void
+''');
+  }
+
+  test_nested_generic_functions_in_generic_class_with_function_typed_params() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  void g<V, W>() {
+    void h<X, Y>(void p(T t, U u, V v, W w, X x, Y y)) {
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            g @23
+              reference: <testLibraryFragment>::@class::C::@method::g
+              enclosingElement: <testLibraryFragment>::@class::C
+              typeParameters
+                covariant V @25
+                  defaultType: dynamic
+                covariant W @28
+                  defaultType: dynamic
+              returnType: void
+''');
+  }
+
+  test_nested_generic_functions_in_generic_class_with_local_variables() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  void g<V, W>() {
+    void h<X, Y>() {
+      T t;
+      U u;
+      V v;
+      W w;
+      X x;
+      Y y;
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          methods
+            g @23
+              reference: <testLibraryFragment>::@class::C::@method::g
+              enclosingElement: <testLibraryFragment>::@class::C
+              typeParameters
+                covariant V @25
+                  defaultType: dynamic
+                covariant W @28
+                  defaultType: dynamic
+              returnType: void
+''');
+  }
+
+  test_nested_generic_functions_with_function_typed_param() async {
+    var library = await buildLibrary('''
+void f<T, U>() {
+  void g<V, W>() {
+    void h<X, Y>(void p(T t, U u, V v, W w, X x, Y y)) {
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+            covariant U @10
+              defaultType: dynamic
+          returnType: void
+''');
+  }
+
+  test_nested_generic_functions_with_local_variables() async {
+    var library = await buildLibrary('''
+void f<T, U>() {
+  void g<V, W>() {
+    void h<X, Y>() {
+      T t;
+      U u;
+      V v;
+      W w;
+      X x;
+      Y y;
+    }
+  }
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+            covariant U @10
+              defaultType: dynamic
+          returnType: void
+''');
+  }
+
+  test_propagated_type_refers_to_closure() async {
+    var library = await buildLibrary('''
+void f() {
+  var x = () => 0;
+  var y = x;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: void
+''');
+  }
+
+  test_syntheticFunctionType_genericClosure() async {
+    var library = await buildLibrary('''
+final v = f() ? <T>(T t) => 0 : <T>(T t) => 1;
+bool f() => true;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int Function<T>(T)
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function<T>(T)
+      functions
+        f @52
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+''');
+  }
+
+  test_syntheticFunctionType_genericClosure_inGenericFunction() async {
+    var library = await buildLibrary('''
+void f<T, U>(bool b) {
+  final v = b ? <V>(T t, U u, V v) => 0 : <V>(T t, U u, V v) => 1;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+            covariant U @10
+              defaultType: dynamic
+          parameters
+            requiredPositional b @18
+              type: bool
+          returnType: void
+''');
+  }
+
+  test_syntheticFunctionType_inGenericClass() async {
+    var library = await buildLibrary('''
+class C<T, U> {
+  var v = f() ? (T t, U u) => 0 : (T t, U u) => 1;
+}
+bool f() => false;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      classes
+        class C @6
+          reference: <testLibraryFragment>::@class::C
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @8
+              defaultType: dynamic
+            covariant U @11
+              defaultType: dynamic
+          fields
+            v @22
+              reference: <testLibraryFragment>::@class::C::@field::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              type: int Function(T, U)
+              shouldUseTypeForInitializerInference: false
+          constructors
+            synthetic @-1
+              reference: <testLibraryFragment>::@class::C::@constructor::new
+              enclosingElement: <testLibraryFragment>::@class::C
+          accessors
+            synthetic get v @-1
+              reference: <testLibraryFragment>::@class::C::@getter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              returnType: int Function(T, U)
+            synthetic set v= @-1
+              reference: <testLibraryFragment>::@class::C::@setter::v
+              enclosingElement: <testLibraryFragment>::@class::C
+              parameters
+                requiredPositional _v @-1
+                  type: int Function(T, U)
+              returnType: void
+      functions
+        f @74
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+''');
+  }
+
+  test_syntheticFunctionType_inGenericFunction() async {
+    var library = await buildLibrary('''
+void f<T, U>(bool b) {
+  var v = b ? (T t, U u) => 0 : (T t, U u) => 1;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      functions
+        f @5
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          typeParameters
+            covariant T @7
+              defaultType: dynamic
+            covariant U @10
+              defaultType: dynamic
+          parameters
+            requiredPositional b @18
+              type: bool
+          returnType: void
+''');
+  }
+
+  test_syntheticFunctionType_noArguments() async {
+    var library = await buildLibrary('''
+final v = f() ? () => 0 : () => 1;
+bool f() => true;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int Function()
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function()
+      functions
+        f @40
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+''');
+  }
+
+  test_syntheticFunctionType_withArguments() async {
+    var library = await buildLibrary('''
+final v = f() ? (int x, String y) => 0 : (int x, String y) => 1;
+bool f() => true;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static final v @6
+          reference: <testLibraryFragment>::@topLevelVariable::v
+          enclosingElement: <testLibraryFragment>
+          type: int Function(int, String)
+          shouldUseTypeForInitializerInference: false
+      accessors
+        synthetic static get v @-1
+          reference: <testLibraryFragment>::@getter::v
+          enclosingElement: <testLibraryFragment>
+          returnType: int Function(int, String)
+      functions
+        f @70
+          reference: <testLibraryFragment>::@function::f
+          enclosingElement: <testLibraryFragment>
+          returnType: bool
+''');
+  }
+
+  test_type_arguments_explicit_dynamic_dynamic() async {
+    var library = await buildLibrary('Map<dynamic, dynamic> m;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static m @22
+          reference: <testLibraryFragment>::@topLevelVariable::m
+          enclosingElement: <testLibraryFragment>
+          type: Map<dynamic, dynamic>
+      accessors
+        synthetic static get m @-1
+          reference: <testLibraryFragment>::@getter::m
+          enclosingElement: <testLibraryFragment>
+          returnType: Map<dynamic, dynamic>
+        synthetic static set m= @-1
+          reference: <testLibraryFragment>::@setter::m
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _m @-1
+              type: Map<dynamic, dynamic>
+          returnType: void
+''');
+  }
+
+  test_type_arguments_explicit_dynamic_int() async {
+    var library = await buildLibrary('Map<dynamic, int> m;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static m @18
+          reference: <testLibraryFragment>::@topLevelVariable::m
+          enclosingElement: <testLibraryFragment>
+          type: Map<dynamic, int>
+      accessors
+        synthetic static get m @-1
+          reference: <testLibraryFragment>::@getter::m
+          enclosingElement: <testLibraryFragment>
+          returnType: Map<dynamic, int>
+        synthetic static set m= @-1
+          reference: <testLibraryFragment>::@setter::m
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _m @-1
+              type: Map<dynamic, int>
+          returnType: void
+''');
+  }
+
+  test_type_arguments_explicit_String_dynamic() async {
+    var library = await buildLibrary('Map<String, dynamic> m;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static m @21
+          reference: <testLibraryFragment>::@topLevelVariable::m
+          enclosingElement: <testLibraryFragment>
+          type: Map<String, dynamic>
+      accessors
+        synthetic static get m @-1
+          reference: <testLibraryFragment>::@getter::m
+          enclosingElement: <testLibraryFragment>
+          returnType: Map<String, dynamic>
+        synthetic static set m= @-1
+          reference: <testLibraryFragment>::@setter::m
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _m @-1
+              type: Map<String, dynamic>
+          returnType: void
+''');
+  }
+
+  test_type_arguments_explicit_String_int() async {
+    var library = await buildLibrary('Map<String, int> m;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static m @17
+          reference: <testLibraryFragment>::@topLevelVariable::m
+          enclosingElement: <testLibraryFragment>
+          type: Map<String, int>
+      accessors
+        synthetic static get m @-1
+          reference: <testLibraryFragment>::@getter::m
+          enclosingElement: <testLibraryFragment>
+          returnType: Map<String, int>
+        synthetic static set m= @-1
+          reference: <testLibraryFragment>::@setter::m
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _m @-1
+              type: Map<String, int>
+          returnType: void
+''');
+  }
+
+  test_type_arguments_implicit() async {
+    var library = await buildLibrary('Map m;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static m @4
+          reference: <testLibraryFragment>::@topLevelVariable::m
+          enclosingElement: <testLibraryFragment>
+          type: Map<dynamic, dynamic>
+      accessors
+        synthetic static get m @-1
+          reference: <testLibraryFragment>::@getter::m
+          enclosingElement: <testLibraryFragment>
+          returnType: Map<dynamic, dynamic>
+        synthetic static set m= @-1
+          reference: <testLibraryFragment>::@setter::m
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _m @-1
+              type: Map<dynamic, dynamic>
+          returnType: void
+''');
+  }
+
+  test_type_dynamic() async {
+    var library = await buildLibrary('dynamic d;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static d @8
+          reference: <testLibraryFragment>::@topLevelVariable::d
+          enclosingElement: <testLibraryFragment>
+          type: dynamic
+      accessors
+        synthetic static get d @-1
+          reference: <testLibraryFragment>::@getter::d
+          enclosingElement: <testLibraryFragment>
+          returnType: dynamic
+        synthetic static set d= @-1
+          reference: <testLibraryFragment>::@setter::d
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _d @-1
+              type: dynamic
+          returnType: void
+''');
+  }
+
+  test_type_unresolved() async {
+    var library = await buildLibrary('C c;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      topLevelVariables
+        static c @2
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: InvalidType
+          returnType: void
+''');
+  }
+
+  test_type_unresolved_prefixed() async {
+    var library = await buildLibrary('import "dart:core" as core; core.C c;');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  libraryImports
+    dart:core as core @22
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  prefixes
+    core @22
+      reference: <testLibraryFragment>::@prefix::core
+      enclosingElement: <testLibrary>
+      enclosingElement3: <testLibraryFragment>
+  definingUnit: <testLibraryFragment>
+  units
+    <testLibraryFragment>
+      enclosingElement: <testLibrary>
+      libraryImports
+        dart:core as core @22
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      libraryImportPrefixes
+        core @22
+          reference: <testLibraryFragment>::@prefix::core
+          enclosingElement: <testLibrary>
+          enclosingElement3: <testLibraryFragment>
+      topLevelVariables
+        static c @35
+          reference: <testLibraryFragment>::@topLevelVariable::c
+          enclosingElement: <testLibraryFragment>
+          type: InvalidType
+      accessors
+        synthetic static get c @-1
+          reference: <testLibraryFragment>::@getter::c
+          enclosingElement: <testLibraryFragment>
+          returnType: InvalidType
+        synthetic static set c= @-1
+          reference: <testLibraryFragment>::@setter::c
+          enclosingElement: <testLibraryFragment>
+          parameters
+            requiredPositional _c @-1
+              type: InvalidType
+          returnType: void
+''');
+  }
+
+  // TODO(scheglov): This is duplicate.
+  void _assertTypeStr(DartType type, String expected) {
+    var typeStr = type.getDisplayString();
+    expect(typeStr, expected);
+  }
+}
+
+@reflectiveTest
+class TypesElementTest_fromBytes extends TypesElementTest {
+  @override
+  bool get keepLinkingLibraries => false;
+}
+
+@reflectiveTest
+class TypesElementTest_keepLinking extends TypesElementTest {
+  @override
+  bool get keepLinkingLibraries => true;
+}
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
deleted file mode 100644
index b02e25d..0000000
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ /dev/null
@@ -1,88490 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/dart/ast/ast.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/test_utilities/mock_sdk.dart';
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../dart/resolution/context_collection_resolution.dart';
-import '../dart/resolution/node_text_expectations.dart';
-import 'element_text.dart';
-import 'elements_base.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(ElementsKeepLinkingTest);
-    defineReflectiveTests(ElementsFromBytesTest);
-    defineReflectiveTests(ClassAugmentationKeepLinkingTest);
-    defineReflectiveTests(ClassAugmentationFromBytesTest);
-    defineReflectiveTests(EnumAugmentationKeepLinkingTest);
-    defineReflectiveTests(EnumAugmentationFromBytesTest);
-    defineReflectiveTests(ExtensionAugmentationKeepLinkingTest);
-    defineReflectiveTests(ExtensionAugmentationFromBytesTest);
-    defineReflectiveTests(ExtensionTypeKeepLinkingTest);
-    defineReflectiveTests(ExtensionTypeFromBytesTest);
-    defineReflectiveTests(ExtensionTypeAugmentationKeepLinkingTest);
-    defineReflectiveTests(ExtensionTypeAugmentationFromBytesTest);
-    defineReflectiveTests(FunctionAugmentationKeepLinkingTest);
-    defineReflectiveTests(FunctionAugmentationFromBytesTest);
-    defineReflectiveTests(MixinAugmentationKeepLinkingTest);
-    defineReflectiveTests(MixinAugmentationFromBytesTest);
-    defineReflectiveTests(TopLevelVariableAugmentationKeepLinkingTest);
-    defineReflectiveTests(TopLevelVariableAugmentationFromBytesTest);
-    defineReflectiveTests(TypeAliasAugmentationKeepLinkingTest);
-    defineReflectiveTests(TypeAliasAugmentationFromBytesTest);
-    defineReflectiveTests(UpdateNodeTextExpectations);
-  });
-}
-
-@reflectiveTest
-class ClassAugmentationFromBytesTest extends ElementsBaseTest
-    with ClassAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => false;
-}
-
-@reflectiveTest
-class ClassAugmentationKeepLinkingTest extends ElementsBaseTest
-    with ClassAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => true;
-}
-
-mixin ClassAugmentationMixin on ElementsBaseTest {
-  test_add_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-class A {
-  void foo() {}
-}
-
-augment class A {
-  void bar() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class A @36
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          methods
-            foo @47
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
-              returnType: void
-          augmented
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
-              <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo
-        augment class A @73
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          methods
-            bar @84
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmentation_constField_hasConstConstructor() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  static const int foo = 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  const A();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            const @43
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            static const foo @66
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @72
-                  staticType: int
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-''');
-  }
-
-  test_augmentation_constField_noConstConstructor() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  static const int foo = 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            static const foo @66
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @72
-                  staticType: int
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-''');
-  }
-
-  test_augmentation_finalField_hasConstConstructor() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  final int foo = 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  const A();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            const @43
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            final foo @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @65
-                  staticType: int
-          accessors
-            synthetic get foo @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-''');
-  }
-
-  test_augmentation_finalField_noConstConstructor() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  final int foo = 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            final foo @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-          accessors
-            synthetic get foo @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-''');
-  }
-
-  test_augmentationTarget() async {
-    newFile('$testPackageLibPath/a1.dart', r'''
-augment library 'test.dart';
-import augment 'a11.dart';
-import augment 'a12.dart';
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/a11.dart', r'''
-augment library 'a1.dart';
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/a12.dart', r'''
-augment library 'a1.dart';
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/a2.dart', r'''
-augment library 'test.dart';
-import augment 'a21.dart';
-import augment 'a22.dart';
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/a21.dart', r'''
-augment library 'a2.dart';
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/a22.dart', r'''
-augment library 'a2.dart';
-augment class A {}
-''');
-
-    configuration.withExportScope = true;
-    var library = await buildLibrary(r'''
-import augment 'a1.dart';
-import augment 'a2.dart';
-class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a1.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a1.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a1.dart
-      augmentationImports
-        package:test/a11.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
-          reference: <testLibrary>::@augmentation::package:test/a11.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a11.dart
-        package:test/a12.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
-          reference: <testLibrary>::@augmentation::package:test/a12.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a12.dart
-    package:test/a2.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a2.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a2.dart
-      augmentationImports
-        package:test/a21.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
-          reference: <testLibrary>::@augmentation::package:test/a21.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a21.dart
-        package:test/a22.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
-          reference: <testLibrary>::@augmentation::package:test/a22.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a22.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @58
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-    <testLibrary>::@fragment::package:test/a1.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @97
-          reference: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a1.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          augmentation: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
-    <testLibrary>::@fragment::package:test/a11.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a11.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
-      classes
-        augment class A @41
-          reference: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a11.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a1.dart::@classAugmentation::A
-          augmentation: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
-    <testLibrary>::@fragment::package:test/a12.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a12.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
-      classes
-        augment class A @41
-          reference: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a12.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a11.dart::@classAugmentation::A
-          augmentation: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
-    <testLibrary>::@fragment::package:test/a2.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @97
-          reference: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a2.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a12.dart::@classAugmentation::A
-          augmentation: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
-    <testLibrary>::@fragment::package:test/a21.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a21.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
-      classes
-        augment class A @41
-          reference: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a21.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a2.dart::@classAugmentation::A
-          augmentation: <testLibrary>::@fragment::package:test/a22.dart::@classAugmentation::A
-    <testLibrary>::@fragment::package:test/a22.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a22.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
-      classes
-        augment class A @41
-          reference: <testLibrary>::@fragment::package:test/a22.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a22.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a21.dart::@classAugmentation::A
-  exportedReferences
-    declared <testLibraryFragment>::@class::A
-  exportNamespace
-    A: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_augmentationTarget_augmentationThenDeclaration() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment class A {
-  void foo1() {}
-}
-
-class A {
-  void foo2() {}
-}
-
-augment class A {
-  void foo3() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
-          methods
-            foo1 @55
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
-              returnType: void
-        class A @74
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          methods
-            foo2 @85
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
-              returnType: void
-          augmented
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
-        augment class A @112
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          methods
-            foo3 @123
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
-              returnType: void
-''');
-  }
-
-  test_augmentationTarget_no2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment class A {
-  void foo1() {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment class A {
-  void foo2() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class B {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @31
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @68
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          methods
-            foo1 @79
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-          augmented
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo1
-              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@method::foo2
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        augment class A @40
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          methods
-            foo2 @51
-              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@method::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmented_constructor_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment A.foo();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int foo = 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo @41
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-              <testLibraryFragment>::@class::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            augment foo @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              periodOffset: 58
-              nameEnd: 62
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
-''');
-  }
-
-  test_augmented_constructor_augment_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment A.foo();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int get foo => 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          accessors
-            get foo @45
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            augment foo @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              periodOffset: 58
-              nameEnd: 62
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
-''');
-  }
-
-  test_augmented_constructor_augment_method() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment A.foo();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-          augmented
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
-            methods
-              <testLibraryFragment>::@class::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            augment foo @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              periodOffset: 58
-              nameEnd: 62
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
-''');
-  }
-
-  test_augmented_constructor_augment_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment A.foo();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  set foo(int _) {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          accessors
-            set foo= @41
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @49
-                  type: int
-              returnType: void
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
-            accessors
-              <testLibraryFragment>::@class::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            augment foo @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              periodOffset: 58
-              nameEnd: 62
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@setter::foo
-''');
-  }
-
-  test_augmented_constructors_add_named() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  A.named();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          augmented
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            named @51
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              periodOffset: 50
-              nameEnd: 56
-''');
-  }
-
-  test_augmented_constructors_add_named_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A<T2> {
-  A.named(T2 a);
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A<T1> {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          augmented
-            constructors
-              ConstructorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
-                augmentationSubstitution: {T2: T1}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            named @55
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              periodOffset: 54
-              nameEnd: 60
-              parameters
-                requiredPositional a @64
-                  type: T2
-''');
-  }
-
-  test_augmented_constructors_add_named_hasUnnamed() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  A.named();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  A();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            @37
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            named @51
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              periodOffset: 50
-              nameEnd: 56
-''');
-  }
-
-  test_augmented_constructors_add_unnamed() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  A();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          augmented
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            @49
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-''');
-  }
-
-  test_augmented_constructors_add_unnamed_hasNamed() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  A();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  A.named();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            named @39
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 38
-              nameEnd: 44
-          augmented
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
-              <testLibraryFragment>::@class::A::@constructor::named
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            @49
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-''');
-  }
-
-  test_augmented_constructors_add_useFieldFormal() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  A.named(this.f);
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  final int f;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            final f @47
-              reference: <testLibraryFragment>::@class::A::@field::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::A::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::f
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
-            accessors
-              <testLibraryFragment>::@class::A::@getter::f
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            named @51
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              periodOffset: 50
-              nameEnd: 56
-              parameters
-                requiredPositional final this.f @62
-                  type: int
-                  field: <testLibraryFragment>::@class::A::@field::f
-''');
-  }
-
-  test_augmented_constructors_add_useFieldInitializer() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  const A.named() : f = 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  final int f;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            final f @47
-              reference: <testLibraryFragment>::@class::A::@field::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::A::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::f
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
-            accessors
-              <testLibraryFragment>::@class::A::@getter::f
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            const named @57
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              periodOffset: 56
-              nameEnd: 62
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: f @67
-                    staticElement: <testLibraryFragment>::@class::A::@field::f
-                    staticType: null
-                  equals: = @69
-                  expression: IntegerLiteral
-                    literal: 0 @71
-                    staticType: int
-''');
-  }
-
-  test_augmented_field_augment_constructor() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  A.foo();
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            foo @39
-              reference: <testLibraryFragment>::@class::A::@constructor::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 38
-              nameEnd: 42
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
-''');
-  }
-
-  test_augmented_field_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo @41
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-              <testLibraryFragment>::@class::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int foo = 1;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-class A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @56
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo @66
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-              <testLibraryFragment>::@class::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-''');
-  }
-
-  test_augmented_field_augment_field_afterGetter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo => 1;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-class A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @56
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo @66
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@class::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_afterSetter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment set foo(int _) {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-class A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @56
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo @66
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          accessors
-            augment set foo= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              parameters
-                requiredPositional _ @69
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@class::A::@setter::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_augmentedInvocation() async {
-    // This is invalid code, but it should not crash.
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {;
-  augment static const int foo = augmented();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  static const int foo = 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            static const foo @54
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @60
-                  staticType: int
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            augment static const foo @75
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                AugmentedInvocation
-                  augmentedKeyword: augmented @81
-                  arguments: ArgumentList
-                    leftParenthesis: ( @90
-                    rightParenthesis: ) @91
-                  element: <null>
-                  staticType: InvalidType
-              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_differentTypes() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment double foo = 1.2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo @41
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-              <testLibraryFragment>::@class::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            augment foo @64
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: double
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_plus() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment final int foo = augmented + 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  final int foo = 0;
-  const A();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            final foo @47
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @53
-                  staticType: int
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-          constructors
-            const @64
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            augment final foo @67
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                BinaryExpression
-                  leftOperand: AugmentedExpression
-                    augmentedKeyword: augmented @73
-                    element: <testLibraryFragment>::@class::A::@field::foo
-                    staticType: int
-                  operator: + @83
-                  rightOperand: IntegerLiteral
-                    literal: 1 @85
-                    staticType: int
-                  staticElement: dart:core::<fragment>::@class::num::@method::+
-                  staticInvokeType: num Function(num)
-                  staticType: int
-              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
-''');
-  }
-
-  /// This is not allowed by the specification, but allowed syntactically,
-  /// so we need a way to handle it.
-  test_augmented_field_augment_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int get foo => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              getter: getter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo @45
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_method() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  void foo() {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            methods
-              <testLibraryFragment>::@class::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
-''');
-  }
-
-  /// This is not allowed by the specification, but allowed syntactically,
-  /// so we need a way to handle it.
-  test_augmented_field_augment_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  set foo(int _) {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            set foo= @41
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @49
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@class::A::@field::foo
-''');
-  }
-
-  test_augmented_fields_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  int foo2 = 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int foo1 = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo1 @41
-              reference: <testLibraryFragment>::@class::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo1 @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo1= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo1 @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo1
-              <testLibraryFragment>::@class::A::@setter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            foo2 @53
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_1
-          accessors
-            synthetic get foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-            synthetic set foo2= @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              parameters
-                requiredPositional _foo2 @-1
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_fields_add_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A<T2> {
-  T2 foo2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A<T1> {
-  T1 foo1;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo1 @44
-              reference: <testLibraryFragment>::@class::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: T1
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo1 @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: T1
-              id: getter_0
-              variable: field_0
-            synthetic set foo1= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo1 @-1
-                  type: T1
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo1
-              FieldMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
-                augmentationSubstitution: {T2: T1}
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo1
-              <testLibraryFragment>::@class::A::@setter::foo1
-              PropertyAccessorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
-                augmentationSubstitution: {T2: T1}
-              PropertyAccessorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
-                augmentationSubstitution: {T2: T1}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            foo2 @56
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: T2
-              id: field_1
-              getter: getter_1
-              setter: setter_1
-          accessors
-            synthetic get foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: T2
-              id: getter_1
-              variable: field_1
-            synthetic set foo2= @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              parameters
-                requiredPositional _foo2 @-1
-                  type: T2
-              returnType: void
-              id: setter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_fields_add_useFieldFormal() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  final int foo;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  A(this.foo);
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            @37
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional final this.foo @44
-                  type: int
-                  field: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            final foo @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-          accessors
-            synthetic get foo @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-''');
-  }
-
-  test_augmented_fields_add_useFieldInitializer() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  final int foo;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  const A() : foo = 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            const @43
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: foo @49
-                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-                    staticType: null
-                  equals: = @53
-                  expression: IntegerLiteral
-                    literal: 0 @55
-                    staticType: int
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            final foo @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-          accessors
-            synthetic get foo @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-''');
-  }
-
-  test_augmented_getter_augments_constructor() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  A.foo();
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            foo @39
-              reference: <testLibraryFragment>::@class::A::@constructor::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 38
-              nameEnd: 42
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::foo
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_0
-              variable: <null>
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
-''');
-  }
-
-  test_augmented_getter_augments_method() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  void foo() {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-            methods
-              <testLibraryFragment>::@class::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_0
-              variable: <null>
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
-''');
-  }
-
-  test_augmented_getter_augments_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  set foo(int _) {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              setter: setter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            set foo= @41
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @49
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@class::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_0
-              variable: <null>
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@setter::foo
-''');
-  }
-
-  test_augmented_getters_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  int get foo2 => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int get foo1 => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              getter: getter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo1 @45
-              reference: <testLibraryFragment>::@class::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              id: field_1
-              getter: getter_1
-          accessors
-            get foo2 @57
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_getters_add_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A<T2> {
-  T2 get foo2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A<T1> {
-  T1 get foo1;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: T1
-              id: field_0
-              getter: getter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            abstract get foo1 @48
-              reference: <testLibraryFragment>::@class::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: T1
-              id: getter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo1
-              FieldMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
-                augmentationSubstitution: {T2: T1}
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo1
-              PropertyAccessorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
-                augmentationSubstitution: {T2: T1}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: T2
-              id: field_1
-              getter: getter_1
-          accessors
-            abstract get foo2 @60
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: T2
-              id: getter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_getters_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo @41
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@class::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
-''');
-  }
-
-  test_augmented_getters_augment_field2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-class A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @56
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo @66
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@class::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_0
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-''');
-  }
-
-  test_augmented_getters_augment_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo1 => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int get foo1 => 0;
-  int get foo2 => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              getter: getter_0
-            synthetic foo2 @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo2
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_1
-              getter: getter_1
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo1 @45
-              reference: <testLibraryFragment>::@class::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo1
-            get foo2 @66
-              reference: <testLibraryFragment>::@class::A::@getter::foo2
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo1
-              <testLibraryFragment>::@class::A::@field::foo2
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo1
-              <testLibraryFragment>::@class::A::@getter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment get foo1 @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo1
-''');
-  }
-
-  test_augmented_getters_augment_getter2_oneLib_oneTop() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo => 0;
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int get foo => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              getter: getter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo @45
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::1
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::1
-            augment get foo @93
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_0
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo::@def::0
-''');
-  }
-
-  test_augmented_getters_augment_getter2_twoLib() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-class A {
-  int get foo => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @56
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              getter: getter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo @70
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@class::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_0
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-''');
-  }
-
-  test_augmented_getters_augment_nothing() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {}
-''');
-
-    configuration
-      ..withConstructors = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          augmented
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: int
-              id: getter_0
-              variable: <null>
-''');
-  }
-
-  test_augmented_interfaces() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A implements I2 {}
-class I2 {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A implements I1 {}
-class I1 {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          interfaces
-            I1
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            interfaces
-              I1
-              I2
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-        class I1 @56
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          interfaces
-            I2
-        class I2 @68
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-''');
-  }
-
-  test_augmented_interfaces_chain() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment class A implements I2 {}
-class I2 {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment class A implements I3 {}
-class I3 {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A implements I1 {}
-class I1 {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          interfaces
-            I1
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            interfaces
-              I1
-              I2
-              I3
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-        class I1 @56
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @68
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          interfaces
-            I2
-        class I2 @93
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        augment class A @40
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          interfaces
-            I3
-        class I3 @65
-          reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::I3
-''');
-  }
-
-  test_augmented_interfaces_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A<T2> implements I2<T2> {}
-class I2<E> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A<T> implements I1 {}
-class I1 {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          interfaces
-            I1
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            interfaces
-              I1
-              I2<T>
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-        class I1 @59
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@class::A
-          interfaces
-            I2<T2>
-        class I2 @76
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant E @79
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-''');
-  }
-
-  test_augmented_interfaces_generic_mismatch() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A<T2, T3> implements I2<T2> {}
-class I2<E> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A<T> implements I1 {}
-class I1 {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          interfaces
-            I1
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            interfaces
-              I1
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-        class I1 @59
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-            covariant T3 @49
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@class::A
-          interfaces
-            I2<T2>
-        class I2 @80
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant E @83
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-''');
-  }
-
-  test_augmented_method_augments_constructor() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  A.foo();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            foo @39
-              reference: <testLibraryFragment>::@class::A::@constructor::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 38
-              nameEnd: 42
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::foo
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          methods
-            augment foo @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
-''');
-  }
-
-  test_augmented_method_augments_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int foo = 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo @41
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-              <testLibraryFragment>::@class::A::@setter::foo
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          methods
-            augment foo @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
-''');
-  }
-
-  test_augmented_method_augments_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int get foo => 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo @45
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          methods
-            augment foo @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
-''');
-  }
-
-  test_augmented_method_augments_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  set foo(int _) {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            set foo= @41
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @49
-                  type: int
-              returnType: void
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@setter::foo
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          methods
-            augment foo @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@setter::foo
-''');
-  }
-
-  test_augmented_methods() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  void bar() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
-              <testLibraryFragment>::@class::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          methods
-            bar @54
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmented_methods_add_withDefaultValue() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  void foo([int x = 42]) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          methods
-            foo @54
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              parameters
-                optionalPositional default x @63
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 42 @67
-                      staticType: int
-              returnType: void
-''');
-  }
-
-  test_augmented_methods_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment void foo1() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  void foo1() {}
-  void foo2() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo1 @42
-              reference: <testLibraryFragment>::@class::A::@method::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo1
-            foo2 @59
-              reference: <testLibraryFragment>::@class::A::@method::foo2
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo1
-              <testLibraryFragment>::@class::A::@method::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          methods
-            augment foo1 @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo1
-''');
-  }
-
-  test_augmented_methods_augment2_oneLib_oneTop() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment void foo() {}
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::1
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          methods
-            augment foo @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::1
-            augment foo @86
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo::@def::0
-''');
-  }
-
-  test_augmented_methods_augment2_oneLib_twoTop() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment void foo() {}
-}
-augment class A {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
-          methods
-            augment foo @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@methodAugmentation::foo
-        augment class A @87
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
-          methods
-            augment foo @106
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
-              returnType: void
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@methodAugmentation::foo
-''');
-  }
-
-  test_augmented_methods_augment2_twoLib() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment class A {
-  augment void foo() {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment class A {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @68
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          methods
-            augment foo @87
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        augment class A @40
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          methods
-            augment foo @59
-              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-''');
-  }
-
-  test_augmented_methods_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A<T2> {
-  T2 bar() => throw 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A<T> {
-  T foo() => throw 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: T
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            methods
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
-                augmentationSubstitution: {T2: T}
-              <testLibraryFragment>::@class::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@class::A
-          methods
-            bar @56
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: T2
-''');
-  }
-
-  test_augmented_methods_generic_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A<T2> {
-  augment T2 foo() => throw 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A<T> {
-  T foo() => throw 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: T
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            methods
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-                augmentationSubstitution: {T2: T}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@class::A
-          methods
-            augment foo @64
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: T2
-              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
-''');
-  }
-
-  test_augmented_mixins() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A with M2 {}
-mixin M2 {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A with M1 {}
-mixin M1 {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          supertype: Object
-          mixins
-            M1
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            mixins
-              M1
-              M2
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-      mixins
-        mixin M1 @50
-          reference: <testLibraryFragment>::@mixin::M1
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          mixins
-            M2
-      mixins
-        mixin M2 @62
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_augmented_mixins_inferredTypeArguments() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A<T2> with M2 {}
-mixin M2<U2> on M1<U2> {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment class A<T3> with M3 {}
-mixin M3<U3> on M2<U3> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-class B<S> {}
-class A<T1> extends B<T1> with M1 {}
-mixin M1<U1> on B<U1> {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @56
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant S @58
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class A @70
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @72
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          supertype: B<T1>
-          mixins
-            M1<T1>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::B::@constructor::new
-                substitution: {S: T1}
-          augmented
-            mixins
-              M1<T1>
-              M2<T1>
-              M3<T1>
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-      mixins
-        mixin M1 @107
-          reference: <testLibraryFragment>::@mixin::M1
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U1 @110
-              defaultType: dynamic
-          superclassConstraints
-            B<U1>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@class::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          mixins
-            M2<T2>
-      mixins
-        mixin M2 @66
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant U2 @69
-              defaultType: dynamic
-          superclassConstraints
-            M1<U2>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          typeParameters
-            covariant T3 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          mixins
-            M3<T3>
-      mixins
-        mixin M3 @66
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          typeParameters
-            covariant U3 @69
-              defaultType: dynamic
-          superclassConstraints
-            M2<U3>
-''');
-  }
-
-  test_augmented_setter_augments_constructor() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment set foo(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  A.foo();
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            foo @39
-              reference: <testLibraryFragment>::@class::A::@constructor::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 38
-              nameEnd: 42
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::foo
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment set foo= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              parameters
-                requiredPositional _ @69
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: <null>
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@constructor::foo
-''');
-  }
-
-  test_augmented_setter_augments_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment set foo(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int get foo => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              getter: getter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo @45
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment set foo= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              parameters
-                requiredPositional _ @69
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: <null>
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@getter::foo
-''');
-  }
-
-  test_augmented_setter_augments_method() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment set foo(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  void foo() {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-            methods
-              <testLibraryFragment>::@class::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment set foo= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              parameters
-                requiredPositional _ @69
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: <null>
-              augmentationTargetAny: <testLibraryFragment>::@class::A::@method::foo
-''');
-  }
-
-  test_augmented_setters_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  set foo2(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  set foo1(int _) {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              setter: setter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            set foo1= @41
-              reference: <testLibraryFragment>::@class::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @50
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@setter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              type: int
-              id: field_1
-              setter: setter_1
-          accessors
-            set foo2= @53
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              parameters
-                requiredPositional _ @62
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_setters_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment set foo(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            foo @41
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@class::A::@getter::foo
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment set foo= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              parameters
-                requiredPositional _ @69
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@class::A::@setter::foo
-''');
-  }
-
-  test_augmented_setters_augment_nothing() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment set foo(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {}
-''');
-
-    configuration
-      ..withConstructors = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          augmented
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment set foo= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              parameters
-                requiredPositional _ @69
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: <null>
-''');
-  }
-
-  test_augmented_setters_augment_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment set foo1(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  set foo1(int _) {}
-  set foo2(int _) {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              setter: setter_0
-            synthetic foo2 @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo2
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_1
-              setter: setter_1
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            set foo1= @41
-              reference: <testLibraryFragment>::@class::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @50
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1
-            set foo2= @62
-              reference: <testLibraryFragment>::@class::A::@setter::foo2
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @71
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@class::A::@field::foo1
-              <testLibraryFragment>::@class::A::@field::foo2
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1
-              <testLibraryFragment>::@class::A::@setter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          accessors
-            augment set foo1= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@setterAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              parameters
-                requiredPositional _ @70
-                  type: int
-              returnType: void
-              id: setter_2
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@class::A::@setter::foo1
-''');
-  }
-
-  /// Invalid augmentation of class with mixin does not "own" the name.
-  test_augmentedBy_mixin2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment mixin A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-
-augment mixin A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-
-class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @57
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTargetAny: <testLibraryFragment>::@class::A
-          superclassConstraints
-            Object
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @44
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTargetAny: <testLibraryFragment>::@class::A
-          superclassConstraints
-            Object
-''');
-  }
-
-  /// Invalid augmentation of class with mixin does not "own" the name.
-  /// When a valid class augmentation follows, it can use the name.
-  test_augmentedBy_mixin_class() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment mixin A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-
-class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @57
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTargetAny: <testLibraryFragment>::@class::A
-          superclassConstraints
-            Object
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_constructors_augment2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment A.named();
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment A.named();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-class A {
-  A.named();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @56
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            named @64
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 63
-              nameEnd: 69
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
-          augmented
-            constructors
-              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructorAugmentation::named
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          constructors
-            augment named @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              periodOffset: 58
-              nameEnd: 64
-              augmentationTarget: <testLibraryFragment>::@class::A::@constructor::named
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructorAugmentation::named
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            augment named @59
-              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A::@constructorAugmentation::named
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-              periodOffset: 58
-              nameEnd: 64
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
-''');
-  }
-
-  test_constructors_augment_named() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment A.named();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  A.named();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            named @39
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 38
-              nameEnd: 44
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
-          augmented
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            augment named @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              periodOffset: 58
-              nameEnd: 64
-              augmentationTarget: <testLibraryFragment>::@class::A::@constructor::named
-''');
-  }
-
-  test_constructors_augment_unnamed() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {
-  augment A();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  A();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            @37
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::new
-          augmented
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-          constructors
-            augment @57
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructorAugmentation::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              augmentationTarget: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_inferTypes_method_ofAugment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  int foo(String a) => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment class B {
-  foo(a) => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import 'a.dart';
-import augment 'b.dart';
-
-class B extends A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class B @49
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new
-          augmented
-            constructors
-              <testLibraryFragment>::@class::B::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@method::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class B @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@class::B
-          methods
-            foo @49
-              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@method::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
-              parameters
-                requiredPositional a @53
-                  type: String
-              returnType: int
-''');
-  }
-
-  test_inferTypes_method_usingAugmentation_interface() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  int foo(String a) => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-augment class B implements A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-
-class B {
-  foo(a) => 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @32
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-          methods
-            foo @38
-              reference: <testLibraryFragment>::@class::B::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional a @42
-                  type: String
-              returnType: int
-          augmented
-            interfaces
-              A
-            constructors
-              <testLibraryFragment>::@class::B::@constructor::new
-            methods
-              <testLibraryFragment>::@class::B::@method::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      classes
-        augment class B @60
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@class::B
-          interfaces
-            A
-''');
-  }
-
-  test_inferTypes_method_usingAugmentation_mixin() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-mixin A {
-  int foo(String a) => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-augment class B with A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-
-class B {
-  foo(a) => 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @32
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-          methods
-            foo @38
-              reference: <testLibraryFragment>::@class::B::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional a @42
-                  type: String
-              returnType: int
-          augmented
-            mixins
-              A
-            constructors
-              <testLibraryFragment>::@class::B::@constructor::new
-            methods
-              <testLibraryFragment>::@class::B::@method::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      classes
-        augment class B @60
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@class::B
-          mixins
-            A
-''');
-  }
-
-  test_inferTypes_method_withAugment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  int foo(String a) => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment class B {
-  augment foo(a) => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import 'a.dart';
-import augment 'b.dart';
-
-class B extends A {
-  foo(a) => 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class B @49
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new
-          methods
-            foo @65
-              reference: <testLibraryFragment>::@class::B::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional a @69
-                  type: String
-              returnType: int
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo
-          augmented
-            constructors
-              <testLibraryFragment>::@class::B::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class B @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@class::B
-          methods
-            augment foo @57
-              reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::B
-              parameters
-                requiredPositional a @61
-                  type: String
-              returnType: int
-              augmentationTarget: <testLibraryFragment>::@class::B::@method::foo
-''');
-  }
-
-  test_methods_typeParameterCountMismatch() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A<T> {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {
-  void foo() {}
-  void bar() {}
-}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-            bar @58
-              reference: <testLibraryFragment>::@class::A::@method::bar
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-          augmented
-            methods
-              <testLibraryFragment>::@class::A::@method::bar
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-                augmentationSubstitution: {T: InvalidType}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@class::A
-          methods
-            augment foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@class::A::@method::foo
-''');
-  }
-
-  test_modifiers_abstract() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment abstract class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-abstract class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class A @40
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment abstract class A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_modifiers_base() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment base class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-base class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        base class A @36
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment base class A @48
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_modifiers_final() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment final class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-final class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        final class A @37
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment final class A @49
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_modifiers_interface() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment interface class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-interface class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        interface class A @41
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment interface class A @53
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_modifiers_macro() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment macro class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-macro class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        macro class A @37
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment macro class A @49
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_modifiers_mixin() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        mixin class A @37
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment mixin class A @49
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_modifiers_sealed() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment sealed class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-sealed class A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract sealed class A @38
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment abstract sealed class A @50
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_notAugmented_interfaces() async {
-    var library = await buildLibrary(r'''
-class A implements I {}
-class I {}
-''');
-
-    configuration.withAugmentedWithoutAugmentation = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            I
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            interfaces
-              I
-        class I @30
-          reference: <testLibraryFragment>::@class::I
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I
-          augmented
-''');
-  }
-
-  test_notAugmented_mixins() async {
-    var library = await buildLibrary(r'''
-class A implements M {}
-mixin M {}
-''');
-
-    configuration.withAugmentedWithoutAugmentation = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            M
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            interfaces
-              M
-      mixins
-        mixin M @30
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          augmented
-            superclassConstraints
-              Object
-''');
-  }
-
-  test_notSimplyBounded_self() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A<T extends A> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A<T extends A> {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              bound: A<dynamic>
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T @45
-              bound: A<dynamic>
-              defaultType: A<dynamic>
-          augmentationTarget: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_supertype_fromAugmentation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class B<T2> extends A<T2> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A<T> {}
-class B<T1> {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @45
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @47
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::B
-          supertype: A<T1>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: T1}
-          augmented
-            constructors
-              <testLibraryFragment>::@class::B::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class B @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@class::B
-''');
-  }
-
-  test_supertype_fromAugmentation2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class C extends A {}
-''');
-
-    // `extends B` should be ignored, we already have `extends A`
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment class C extends B {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-class A {}
-class B {}
-class C {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @56
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @67
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @78
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-          augmented
-            constructors
-              <testLibraryFragment>::@class::C::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class C @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::C
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::C
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class C @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::C
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::C
-''');
-  }
-
-  test_typeParameters_defaultType() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A<T extends B> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A<T extends B> {}
-class B {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              bound: B
-              defaultType: B
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-        class B @55
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T @45
-              bound: B
-              defaultType: B
-          augmentationTarget: <testLibraryFragment>::@class::A
-''');
-  }
-}
-
-@reflectiveTest
-class ElementsFromBytesTest extends ElementsTest {
-  @override
-  bool get keepLinkingLibraries => false;
-}
-
-@reflectiveTest
-class ElementsKeepLinkingTest extends ElementsTest {
-  @override
-  bool get keepLinkingLibraries => true;
-}
-
-abstract class ElementsTest extends ElementsBaseTest {
-  @override
-  List<MockSdkLibrary> additionalMockSdkLibraries = [];
-
-  test_annotationArgument_recordLiteral() async {
-    var library = await buildLibrary('''
-@A((2, a: 3))
-class C {}
-class A {
-  const A(o);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @20
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: SimpleIdentifier
-                token: A @1
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @2
-                arguments
-                  RecordLiteral
-                    leftParenthesis: ( @3
-                    fields
-                      IntegerLiteral
-                        literal: 2 @4
-                        staticType: int
-                      NamedExpression
-                        name: Label
-                          label: SimpleIdentifier
-                            token: a @7
-                            staticElement: <null>
-                            staticType: null
-                          colon: : @8
-                        expression: IntegerLiteral
-                          literal: 3 @10
-                          staticType: int
-                    rightParenthesis: ) @11
-                    staticType: (int, {int a})
-                rightParenthesis: ) @12
-              element: <testLibraryFragment>::@class::A::@constructor::new
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @43
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional o @45
-                  type: dynamic
-''');
-  }
-
-  test_annotationArgument_recordLiteral_withConst() async {
-    var library = await buildLibrary('''
-@A(const ('',))
-class C {}
-class A {
-  const A(o);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: SimpleIdentifier
-                token: A @1
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @2
-                arguments
-                  RecordLiteral
-                    constKeyword: const @3
-                    leftParenthesis: ( @9
-                    fields
-                      SimpleStringLiteral
-                        literal: '' @10
-                    rightParenthesis: ) @13
-                    staticType: (String,)
-                rightParenthesis: ) @14
-              element: <testLibraryFragment>::@class::A::@constructor::new
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class A @33
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @45
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional o @47
-                  type: dynamic
-''');
-  }
-
-  test_augmentation_augmentationImports_augmentation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-class A {}
-''');
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-class B {}
-''');
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @31
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class A @60
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        class B @32
-          reference: <testLibrary>::@fragment::package:test/b.dart::@class::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/b.dart::@class::B::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::B
-''');
-  }
-
-  test_augmentation_class_constructor_superConstructor_generic_named() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-class B extends A<int> {
-  B() : super.named(0);
-}
-''');
-    var library = await buildLibrary('''
-import augment 'a.dart';
-class A<T> {
-  A.named(T a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              defaultType: dynamic
-          constructors
-            named @42
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 41
-              nameEnd: 47
-              parameters
-                requiredPositional a @50
-                  type: T
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class B @35
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          supertype: A<int>
-          constructors
-            @56
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::named
-                substitution: {T: int}
-''');
-  }
-
-  test_augmentation_class_constructor_superConstructor_notGeneric_named() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-class B extends A {
-  B() : super.named();
-}
-''');
-    var library = await buildLibrary('''
-import augment 'a.dart';
-class A {
-  A.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            named @39
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 38
-              nameEnd: 44
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class B @35
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          supertype: A
-          constructors
-            @51
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::named
-''');
-  }
-
-  test_augmentation_class_constructor_superConstructor_notGeneric_unnamed_explicit() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-class B extends A {
-  B() : super();
-}
-''');
-    var library = await buildLibrary('''
-import augment 'a.dart';
-class A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class B @35
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          supertype: A
-          constructors
-            @51
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_augmentation_class_notSimplyBounded_circularity_via_typedef() async {
-    // C's type parameter T is not simply bounded because its bound, F, expands
-    // to `dynamic F(C)`, which refers to C.
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-class C<T extends F> {}
-''');
-    var library = await buildLibrary('''
-import augment 'a.dart';
-typedef F(C value);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased notSimplyBounded F @33
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function(C<dynamic>)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional value @37
-                type: C<dynamic>
-            returnType: dynamic
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        notSimplyBounded class C @35
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::C
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T @37
-              bound: dynamic
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::C::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::C
-''');
-  }
-
-  test_augmentation_class_notSimplyBounded_self() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-class C<T extends C> {}
-''');
-    var library = await buildLibrary('''
-import augment 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        notSimplyBounded class C @35
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::C
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T @37
-              bound: C<dynamic>
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::C::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::C
-''');
-  }
-
-  test_augmentation_defaultValue_class_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  static const a = 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-void f({int x = A.a}) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      functions
-        f @51
-          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          parameters
-            optionalNamed default x @58
-              reference: <testLibrary>::@fragment::package:test/b.dart::@function::f::@parameter::x
-              type: int
-              constantInitializer
-                PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: A @62
-                    staticElement: package:test/a.dart::<fragment>::@class::A
-                    staticType: null
-                  period: . @63
-                  identifier: SimpleIdentifier
-                    token: a @64
-                    staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
-                    staticType: int
-                  staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
-                  staticType: int
-          returnType: void
-''');
-  }
-
-  test_augmentation_defaultValue_prefix_class_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  static const a = 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart' as prefix;
-void f({int x = prefix.A.a}) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart as prefix @48
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      prefixes
-        prefix @48
-          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
-          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart as prefix @48
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      libraryImportPrefixes
-        prefix @48
-          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
-          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      functions
-        f @61
-          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          parameters
-            optionalNamed default x @68
-              reference: <testLibrary>::@fragment::package:test/b.dart::@function::f::@parameter::x
-              type: int
-              constantInitializer
-                PropertyAccess
-                  target: PrefixedIdentifier
-                    prefix: SimpleIdentifier
-                      token: prefix @72
-                      staticElement: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
-                      staticType: null
-                    period: . @78
-                    identifier: SimpleIdentifier
-                      token: A @79
-                      staticElement: package:test/a.dart::<fragment>::@class::A
-                      staticType: null
-                    staticElement: package:test/a.dart::<fragment>::@class::A
-                    staticType: null
-                  operator: . @80
-                  propertyName: SimpleIdentifier
-                    token: a @81
-                    staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
-                    staticType: int
-                  staticType: int
-          returnType: void
-''');
-  }
-
-  test_augmentation_importScope_constant() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-final a = 0;
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-const b = a;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      topLevelVariables
-        static const b @52
-          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::b
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: a @56
-              staticElement: package:test/a.dart::<fragment>::@getter::a
-              staticType: int
-      accessors
-        synthetic static get b @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::b
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: int
-''');
-  }
-
-  test_augmentation_importScope_constant_class_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  static const a = 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-const b = A.a;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      topLevelVariables
-        static const b @52
-          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::b
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: A @56
-                staticElement: package:test/a.dart::<fragment>::@class::A
-                staticType: null
-              period: . @57
-              identifier: SimpleIdentifier
-                token: a @58
-                staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
-                staticType: int
-              staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
-              staticType: int
-      accessors
-        synthetic static get b @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::b
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: int
-''');
-  }
-
-  test_augmentation_importScope_constant_instanceCreation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  const A {};
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-const a = A();
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      topLevelVariables
-        static const a @52
-          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::a
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          type: A
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              constructorName: ConstructorName
-                type: NamedType
-                  name: A @56
-                  element: package:test/a.dart::<fragment>::@class::A
-                  type: A
-                staticElement: package:test/a.dart::<fragment>::@class::A::@constructor::new
-              argumentList: ArgumentList
-                leftParenthesis: ( @57
-                rightParenthesis: ) @58
-              staticType: A
-      accessors
-        synthetic static get a @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::a
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: A
-''');
-  }
-
-  test_augmentation_importScope_constant_prefix_class_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  static const a = 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart' as prefix;
-const b = prefix.A.a;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart as prefix @48
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      prefixes
-        prefix @48
-          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
-          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart as prefix @48
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      libraryImportPrefixes
-        prefix @48
-          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
-          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      topLevelVariables
-        static const b @62
-          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::b
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PropertyAccess
-              target: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: prefix @66
-                  staticElement: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
-                  staticType: null
-                period: . @72
-                identifier: SimpleIdentifier
-                  token: A @73
-                  staticElement: package:test/a.dart::<fragment>::@class::A
-                  staticType: null
-                staticElement: package:test/a.dart::<fragment>::@class::A
-                staticType: null
-              operator: . @74
-              propertyName: SimpleIdentifier
-                token: a @75
-                staticElement: package:test/a.dart::<fragment>::@class::A::@getter::a
-                staticType: int
-              staticType: int
-      accessors
-        synthetic static get b @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::b
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: int
-''');
-  }
-
-  test_augmentation_importScope_prefixed_metadata() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  const A();
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart' as prefix;
-
-@prefix.A()
-void f() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart as prefix @48
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      prefixes
-        prefix @48
-          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
-          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart as prefix @48
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      libraryImportPrefixes
-        prefix @48
-          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
-          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      functions
-        f @74
-          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          metadata
-            Annotation
-              atSign: @ @57
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: prefix @58
-                  staticElement: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
-                  staticType: null
-                period: . @64
-                identifier: SimpleIdentifier
-                  token: A @65
-                  staticElement: package:test/a.dart::<fragment>::@class::A
-                  staticType: null
-                staticElement: package:test/a.dart::<fragment>::@class::A
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @66
-                rightParenthesis: ) @67
-              element: package:test/a.dart::<fragment>::@class::A::@constructor::new
-          returnType: void
-''');
-  }
-
-  test_augmentation_importScope_prefixed_typeAnnotation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart' as prefix;
-prefix.A f() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart as prefix @48
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      prefixes
-        prefix @48
-          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
-          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart as prefix @48
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      libraryImportPrefixes
-        prefix @48
-          reference: <testLibrary>::@fragment::package:test/b.dart::@prefix::prefix
-          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      functions
-        f @65
-          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: A
-''');
-  }
-
-  test_augmentation_importScope_topInference() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-final a = 0;
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-final b = a;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      topLevelVariables
-        static final b @52
-          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::b
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get b @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::b
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: int
-''');
-  }
-
-  test_augmentation_importScope_types_augmentation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-A f() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-A f() {}
-''');
-
-    // The augmentation imports `a.dart`, so can resolve `A`.
-    // But the library does not import, so there `A` is unresolved.
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @27
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      functions
-        f @48
-          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: A
-''');
-  }
-
-  test_augmentation_importScope_types_library() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-A f() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-import 'a.dart';
-A f() {}
-''');
-
-    // The library imports `a.dart`, so can resolve `A`.
-    // But the augmentation does not import, so there `A` is unresolved.
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      functions
-        f @44
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      functions
-        f @31
-          reference: <testLibrary>::@fragment::package:test/b.dart::@function::f
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: InvalidType
-''');
-  }
-
-  test_augmentation_libraryExports_library() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-export 'dart:async';
-''');
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-export 'dart:collection';
-export 'dart:math';
-''');
-    var library = await buildLibrary(r'''
-import 'dart:io';
-import augment 'a.dart';
-import augment 'b.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:io
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      libraryExports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryExports
-        dart:collection
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:io
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryExports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryExports
-        dart:collection
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-''');
-  }
-
-  test_augmentation_libraryImports_library() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import 'dart:async';
-''');
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'dart:collection';
-import 'dart:math';
-''');
-    var library = await buildLibrary(r'''
-import 'dart:io';
-import augment 'a.dart';
-import augment 'b.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:io
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        dart:collection
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:io
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        dart:collection
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-''');
-  }
-
-  test_augmentation_topScope_augmentation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-class A {}
-A f() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-A f() {}
-''');
-
-    // The augmentation declares `A`, and can it be used in the library.
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @27
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: A
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class A @35
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
-      functions
-        f @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@function::f
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: A
-''');
-  }
-
-  test_augmentation_topScope_library() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-A f() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {}
-A f() {}
-''');
-
-    // The library declares `A`, and can it be used in the augmentation.
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      functions
-        f @38
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: A
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      functions
-        f @31
-          reference: <testLibrary>::@fragment::package:test/a.dart::@function::f
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: A
-''');
-  }
-
-  test_class_abstract() async {
-    var library = await buildLibrary('abstract class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class C @15
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_base() async {
-    var library = await buildLibrary('base class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        base class C @11
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_constructor_const() async {
-    var library = await buildLibrary('class C { const C(); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @16
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_constructor_const_external() async {
-    var library = await buildLibrary('class C { external const C(); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            external const @25
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_constructor_documented() async {
-    var library = await buildLibrary('''
-class C {
-  /**
-   * Docs
-   */
-  C();
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @34
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /**\n   * Docs\n   */
-''');
-  }
-
-  test_class_constructor_explicit_named() async {
-    var library = await buildLibrary('class C { C.foo(); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            foo @12
-              reference: <testLibraryFragment>::@class::C::@constructor::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 11
-              nameEnd: 15
-''');
-  }
-
-  test_class_constructor_explicit_type_params() async {
-    var library = await buildLibrary('class C<T, U> { C(); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          constructors
-            @16
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_constructor_explicit_unnamed() async {
-    var library = await buildLibrary('class C { C(); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @10
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_constructor_external() async {
-    var library = await buildLibrary('class C { external C(); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            external @19
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_constructor_factory() async {
-    var library = await buildLibrary('class C { factory C() => throw 0; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            factory @18
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_constructor_field_formal_dynamic_dynamic() async {
-    var library =
-        await buildLibrary('class C { dynamic x; C(dynamic this.x); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @21
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @36
-                  type: dynamic
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_dynamic_typed() async {
-    var library = await buildLibrary('class C { dynamic x; C(int this.x); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @21
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @32
-                  type: int
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_dynamic_untyped() async {
-    var library = await buildLibrary('class C { dynamic x; C(this.x); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @21
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @28
-                  type: dynamic
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_functionTyped_noReturnType() async {
-    var library = await buildLibrary(r'''
-class C {
-  var x;
-  C(this.x(double b));
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @16
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @21
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @28
-                  type: dynamic Function(double)
-                  parameters
-                    requiredPositional b @37
-                      type: double
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_functionTyped_withReturnType() async {
-    var library = await buildLibrary(r'''
-class C {
-  var x;
-  C(int this.x(double b));
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @16
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @21
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @32
-                  type: int Function(double)
-                  parameters
-                    requiredPositional b @41
-                      type: double
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_functionTyped_withReturnType_generic() async {
-    var library = await buildLibrary(r'''
-class C {
-  Function() f;
-  C(List<U> this.f<T, U>(T t));
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            f @23
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic Function()
-          constructors
-            @28
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.f @43
-                  type: List<U> Function<T, U>(T)
-                  typeParameters
-                    covariant T @45
-                    covariant U @48
-                  parameters
-                    requiredPositional t @53
-                      type: T
-                  field: <testLibraryFragment>::@class::C::@field::f
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic Function()
-            synthetic set f= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _f @-1
-                  type: dynamic Function()
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_multiple_matching_fields() async {
-    // This is a compile-time error but it should still analyze consistently.
-    var library = await buildLibrary('class C { C(this.x); int x; String x; }');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @25
-              reference: <testLibraryFragment>::@class::C::@field::x::@def::0
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-            x @35
-              reference: <testLibraryFragment>::@class::C::@field::x::@def::1
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: String
-          constructors
-            @10
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @17
-                  type: int
-                  field: <testLibraryFragment>::@class::C::@field::x::@def::0
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x::@def::0
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x::@def::0
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: int
-              returnType: void
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x::@def::1
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: String
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x::@def::1
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: String
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_no_matching_field() async {
-    // This is a compile-time error but it should still analyze consistently.
-    var library = await buildLibrary('class C { C(this.x); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @10
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @17
-                  type: dynamic
-                  field: <null>
-''');
-  }
-
-  test_class_constructor_field_formal_typed_dynamic() async {
-    var library = await buildLibrary('class C { num x; C(dynamic this.x); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: num
-          constructors
-            @17
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @32
-                  type: dynamic
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: num
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: num
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_typed_typed() async {
-    var library = await buildLibrary('class C { num x; C(int this.x); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: num
-          constructors
-            @17
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @28
-                  type: int
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: num
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: num
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_typed_untyped() async {
-    var library = await buildLibrary('class C { num x; C(this.x); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: num
-          constructors
-            @17
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @24
-                  type: num
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: num
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: num
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_untyped_dynamic() async {
-    var library = await buildLibrary('class C { var x; C(dynamic this.x); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @17
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @32
-                  type: dynamic
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_untyped_typed() async {
-    var library = await buildLibrary('class C { var x; C(int this.x); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @17
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @28
-                  type: int
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_constructor_field_formal_untyped_untyped() async {
-    var library = await buildLibrary('class C { var x; C(this.x); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @17
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @24
-                  type: dynamic
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_constructor_fieldFormal_named_noDefault() async {
-    var library = await buildLibrary('class C { int x; C({this.x}); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            @17
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalNamed default final this.x @25
-                  reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
-                  type: int
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_constructor_fieldFormal_named_withDefault() async {
-    var library = await buildLibrary('class C { int x; C({this.x: 42}); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            @17
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalNamed default final this.x @25
-                  reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 42 @28
-                      staticType: int
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_constructor_fieldFormal_optional_noDefault() async {
-    var library = await buildLibrary('class C { int x; C([this.x]); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            @17
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default final this.x @25
-                  type: int
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_constructor_fieldFormal_optional_withDefault() async {
-    var library = await buildLibrary('class C { int x; C([this.x = 42]); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            @17
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default final this.x @25
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 42 @29
-                      staticType: int
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_constructor_implicit_type_params() async {
-    var library = await buildLibrary('class C<T, U> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_constructor_initializers_assertInvocation() async {
-    var library = await buildLibrary('''
-class C {
-  const C(int x) : assert(x >= 42);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional x @24
-                  type: int
-              constantInitializers
-                AssertInitializer
-                  assertKeyword: assert @29
-                  leftParenthesis: ( @35
-                  condition: BinaryExpression
-                    leftOperand: SimpleIdentifier
-                      token: x @36
-                      staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
-                      staticType: int
-                    operator: >= @38
-                    rightOperand: IntegerLiteral
-                      literal: 42 @41
-                      staticType: int
-                    staticElement: dart:core::<fragment>::@class::num::@method::>=
-                    staticInvokeType: bool Function(num)
-                    staticType: bool
-                  rightParenthesis: ) @43
-''');
-  }
-
-  test_class_constructor_initializers_assertInvocation_message() async {
-    var library = await buildLibrary('''
-class C {
-  const C(int x) : assert(x >= 42, 'foo');
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional x @24
-                  type: int
-              constantInitializers
-                AssertInitializer
-                  assertKeyword: assert @29
-                  leftParenthesis: ( @35
-                  condition: BinaryExpression
-                    leftOperand: SimpleIdentifier
-                      token: x @36
-                      staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
-                      staticType: int
-                    operator: >= @38
-                    rightOperand: IntegerLiteral
-                      literal: 42 @41
-                      staticType: int
-                    staticElement: dart:core::<fragment>::@class::num::@method::>=
-                    staticInvokeType: bool Function(num)
-                    staticType: bool
-                  comma: , @43
-                  message: SimpleStringLiteral
-                    literal: 'foo' @45
-                  rightParenthesis: ) @50
-''');
-  }
-
-  test_class_constructor_initializers_field() async {
-    var library = await buildLibrary('''
-class C {
-  final x;
-  const C() : x = 42;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            const @29
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: x @35
-                    staticElement: <testLibraryFragment>::@class::C::@field::x
-                    staticType: null
-                  equals: = @37
-                  expression: IntegerLiteral
-                    literal: 42 @39
-                    staticType: int
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_class_constructor_initializers_field_notConst() async {
-    var library = await buildLibrary('''
-class C {
-  final x;
-  const C() : x = foo();
-}
-int foo() => 42;
-''');
-    // It is OK to keep non-constant initializers.
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            const @29
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: x @35
-                    staticElement: <testLibraryFragment>::@class::C::@field::x
-                    staticType: null
-                  equals: = @37
-                  expression: MethodInvocation
-                    methodName: SimpleIdentifier
-                      token: foo @39
-                      staticElement: <testLibraryFragment>::@function::foo
-                      staticType: int Function()
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @42
-                      rightParenthesis: ) @43
-                    staticInvokeType: int Function()
-                    staticType: int
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-      functions
-        foo @52
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_class_constructor_initializers_field_optionalPositionalParameter() async {
-    var library = await buildLibrary('''
-class A {
-  final int _f;
-  const A([int f = 0]) : _f = f;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _f @22
-              reference: <testLibraryFragment>::@class::A::@field::_f
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            const @34
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                optionalPositional default f @41
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 0 @45
-                      staticType: int
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: _f @51
-                    staticElement: <testLibraryFragment>::@class::A::@field::_f
-                    staticType: null
-                  equals: = @54
-                  expression: SimpleIdentifier
-                    token: f @56
-                    staticElement: <testLibraryFragment>::@class::A::@constructor::new::@parameter::f
-                    staticType: int
-          accessors
-            synthetic get _f @-1
-              reference: <testLibraryFragment>::@class::A::@getter::_f
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-''');
-  }
-
-  test_class_constructor_initializers_field_recordLiteral() async {
-    var library = await buildLibrary('''
-class C {
-  final Object x;
-  const C(int a) : x = (0, a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @25
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: Object
-          constructors
-            const @36
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional a @42
-                  type: int
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: x @47
-                    staticElement: <testLibraryFragment>::@class::C::@field::x
-                    staticType: null
-                  equals: = @49
-                  expression: RecordLiteral
-                    leftParenthesis: ( @51
-                    fields
-                      IntegerLiteral
-                        literal: 0 @52
-                        staticType: int
-                      SimpleIdentifier
-                        token: a @55
-                        staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::a
-                        staticType: int
-                    rightParenthesis: ) @56
-                    staticType: (int, int)
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: Object
-''');
-  }
-
-  test_class_constructor_initializers_field_withParameter() async {
-    var library = await buildLibrary('''
-class C {
-  final x;
-  const C(int p) : x = 1 + p;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            const @29
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional p @35
-                  type: int
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: x @40
-                    staticElement: <testLibraryFragment>::@class::C::@field::x
-                    staticType: null
-                  equals: = @42
-                  expression: BinaryExpression
-                    leftOperand: IntegerLiteral
-                      literal: 1 @44
-                      staticType: int
-                    operator: + @46
-                    rightOperand: SimpleIdentifier
-                      token: p @48
-                      staticElement: <testLibraryFragment>::@class::C::@constructor::new::@parameter::p
-                      staticType: int
-                    staticElement: dart:core::<fragment>::@class::num::@method::+
-                    staticInvokeType: num Function(num)
-                    staticType: int
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_class_constructor_initializers_genericFunctionType() async {
-    var library = await buildLibrary('''
-class A<T> {
-  const A();
-}
-class B {
-  const B(dynamic x);
-  const B.f()
-   : this(A<Function()>());
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @34
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @46
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional x @56
-                  type: dynamic
-            const f @70
-              reference: <testLibraryFragment>::@class::B::@constructor::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              periodOffset: 69
-              nameEnd: 71
-              constantInitializers
-                RedirectingConstructorInvocation
-                  thisKeyword: this @79
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @83
-                    arguments
-                      InstanceCreationExpression
-                        constructorName: ConstructorName
-                          type: NamedType
-                            name: A @84
-                            typeArguments: TypeArgumentList
-                              leftBracket: < @85
-                              arguments
-                                GenericFunctionType
-                                  functionKeyword: Function @86
-                                  parameters: FormalParameterList
-                                    leftParenthesis: ( @94
-                                    rightParenthesis: ) @95
-                                  declaredElement: GenericFunctionTypeElement
-                                    parameters
-                                    returnType: dynamic
-                                    type: dynamic Function()
-                                  type: dynamic Function()
-                              rightBracket: > @96
-                            element: <testLibraryFragment>::@class::A
-                            type: A<dynamic Function()>
-                          staticElement: ConstructorMember
-                            base: <testLibraryFragment>::@class::A::@constructor::new
-                            substitution: {T: dynamic Function()}
-                        argumentList: ArgumentList
-                          leftParenthesis: ( @97
-                          rightParenthesis: ) @98
-                        staticType: A<dynamic Function()>
-                    rightParenthesis: ) @99
-                  staticElement: <testLibraryFragment>::@class::B::@constructor::new
-              redirectedConstructor: <testLibraryFragment>::@class::B::@constructor::new
-''');
-  }
-
-  test_class_constructor_initializers_superInvocation_argumentContextType() async {
-    var library = await buildLibrary('''
-class A {
-  const A(List<String> values);
-}
-class B extends A {
-  const B() : super(const []);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional values @33
-                  type: List<String>
-        class B @50
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            const @72
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @78
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @83
-                    arguments
-                      ListLiteral
-                        constKeyword: const @84
-                        leftBracket: [ @90
-                        rightBracket: ] @91
-                        staticType: List<String>
-                    rightParenthesis: ) @92
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_initializers_superInvocation_named() async {
-    var library = await buildLibrary('''
-class A {
-  const A.aaa(int p);
-}
-class C extends A {
-  const C() : super.aaa(42);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const aaa @20
-              reference: <testLibraryFragment>::@class::A::@constructor::aaa
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 19
-              nameEnd: 23
-              parameters
-                requiredPositional p @28
-                  type: int
-        class C @40
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            const @62
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @68
-                  period: . @73
-                  constructorName: SimpleIdentifier
-                    token: aaa @74
-                    staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @77
-                    arguments
-                      IntegerLiteral
-                        literal: 42 @78
-                        staticType: int
-                    rightParenthesis: ) @80
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::aaa
-''');
-  }
-
-  test_class_constructor_initializers_superInvocation_named_underscore() async {
-    var library = await buildLibrary('''
-class A {
-  const A._();
-}
-class B extends A {
-  const B() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const _ @20
-              reference: <testLibraryFragment>::@class::A::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 19
-              nameEnd: 21
-        class B @33
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            const @55
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @61
-                  period: . @66
-                  constructorName: SimpleIdentifier
-                    token: _ @67
-                    staticElement: <testLibraryFragment>::@class::A::@constructor::_
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @68
-                    rightParenthesis: ) @69
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::_
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::_
-''');
-  }
-
-  test_class_constructor_initializers_superInvocation_namedExpression() async {
-    var library = await buildLibrary('''
-class A {
-  const A.aaa(a, {int b});
-}
-class C extends A {
-  const C() : super.aaa(1, b: 2);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const aaa @20
-              reference: <testLibraryFragment>::@class::A::@constructor::aaa
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 19
-              nameEnd: 23
-              parameters
-                requiredPositional a @24
-                  type: dynamic
-                optionalNamed default b @32
-                  reference: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b
-                  type: int
-        class C @45
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            const @67
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @73
-                  period: . @78
-                  constructorName: SimpleIdentifier
-                    token: aaa @79
-                    staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @82
-                    arguments
-                      IntegerLiteral
-                        literal: 1 @83
-                        staticType: int
-                      NamedExpression
-                        name: Label
-                          label: SimpleIdentifier
-                            token: b @86
-                            staticElement: <testLibraryFragment>::@class::A::@constructor::aaa::@parameter::b
-                            staticType: null
-                          colon: : @87
-                        expression: IntegerLiteral
-                          literal: 2 @89
-                          staticType: int
-                    rightParenthesis: ) @90
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::aaa
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::aaa
-''');
-  }
-
-  test_class_constructor_initializers_superInvocation_unnamed() async {
-    var library = await buildLibrary('''
-class A {
-  const A(int p);
-}
-class C extends A {
-  const C.ccc() : super(42);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional p @24
-                  type: int
-        class C @36
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            const ccc @60
-              reference: <testLibraryFragment>::@class::C::@constructor::ccc
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 59
-              nameEnd: 63
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @68
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @73
-                    arguments
-                      IntegerLiteral
-                        literal: 42 @74
-                        staticType: int
-                    rightParenthesis: ) @76
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_initializers_thisInvocation_argumentContextType() async {
-    var library = await buildLibrary('''
-class A {
-  const A(List<String> values);
-  const A.empty() : this(const []);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional values @33
-                  type: List<String>
-            const empty @52
-              reference: <testLibraryFragment>::@class::A::@constructor::empty
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 51
-              nameEnd: 57
-              constantInitializers
-                RedirectingConstructorInvocation
-                  thisKeyword: this @62
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @66
-                    arguments
-                      ListLiteral
-                        constKeyword: const @67
-                        leftBracket: [ @73
-                        rightBracket: ] @74
-                        staticType: List<String>
-                    rightParenthesis: ) @75
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              redirectedConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_initializers_thisInvocation_named() async {
-    var library = await buildLibrary('''
-class C {
-  const C() : this.named(1, 'bbb');
-  const C.named(int a, String b);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                RedirectingConstructorInvocation
-                  thisKeyword: this @24
-                  period: . @28
-                  constructorName: SimpleIdentifier
-                    token: named @29
-                    staticElement: <testLibraryFragment>::@class::C::@constructor::named
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @34
-                    arguments
-                      IntegerLiteral
-                        literal: 1 @35
-                        staticType: int
-                      SimpleStringLiteral
-                        literal: 'bbb' @38
-                    rightParenthesis: ) @43
-                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
-              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
-            const named @56
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 55
-              nameEnd: 61
-              parameters
-                requiredPositional a @66
-                  type: int
-                requiredPositional b @76
-                  type: String
-''');
-  }
-
-  test_class_constructor_initializers_thisInvocation_namedExpression() async {
-    var library = await buildLibrary('''
-class C {
-  const C() : this.named(1, b: 2);
-  const C.named(a, {int b});
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                RedirectingConstructorInvocation
-                  thisKeyword: this @24
-                  period: . @28
-                  constructorName: SimpleIdentifier
-                    token: named @29
-                    staticElement: <testLibraryFragment>::@class::C::@constructor::named
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @34
-                    arguments
-                      IntegerLiteral
-                        literal: 1 @35
-                        staticType: int
-                      NamedExpression
-                        name: Label
-                          label: SimpleIdentifier
-                            token: b @38
-                            staticElement: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b
-                            staticType: null
-                          colon: : @39
-                        expression: IntegerLiteral
-                          literal: 2 @41
-                          staticType: int
-                    rightParenthesis: ) @42
-                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
-              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
-            const named @55
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 54
-              nameEnd: 60
-              parameters
-                requiredPositional a @61
-                  type: dynamic
-                optionalNamed default b @69
-                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::b
-                  type: int
-''');
-  }
-
-  test_class_constructor_initializers_thisInvocation_unnamed() async {
-    var library = await buildLibrary('''
-class C {
-  const C.named() : this(1, 'bbb');
-  const C(int a, String b);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const named @20
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 19
-              nameEnd: 25
-              constantInitializers
-                RedirectingConstructorInvocation
-                  thisKeyword: this @30
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @34
-                    arguments
-                      IntegerLiteral
-                        literal: 1 @35
-                        staticType: int
-                      SimpleStringLiteral
-                        literal: 'bbb' @38
-                    rightParenthesis: ) @43
-                  staticElement: <testLibraryFragment>::@class::C::@constructor::new
-              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
-            const @54
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional a @60
-                  type: int
-                requiredPositional b @70
-                  type: String
-''');
-  }
-
-  test_class_constructor_parameters_super_explicitType_function() async {
-    var library = await buildLibrary('''
-class A {
-  A(Object? a);
-}
-
-class B extends A {
-  B(int super.a<T extends num>(T d)?);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @22
-                  type: Object?
-        class B @35
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @51
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional final super.a @63
-                  type: int Function<T extends num>(T)?
-                  typeParameters
-                    covariant T @65
-                      bound: num
-                  parameters
-                    requiredPositional d @82
-                      type: T
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_explicitType_interface() async {
-    var library = await buildLibrary('''
-class A {
-  A(num a);
-}
-
-class B extends A {
-  B(int super.a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @18
-                  type: num
-        class B @31
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @47
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional final super.a @59
-                  type: int
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_explicitType_interface_nullable() async {
-    var library = await buildLibrary('''
-class A {
-  A(num? a);
-}
-
-class B extends A {
-  B(int? super.a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @19
-                  type: num?
-        class B @32
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @48
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional final super.a @61
-                  type: int?
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_invalid_topFunction() async {
-    var library = await buildLibrary('''
-void f(super.a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional final super.a @13
-              type: dynamic
-              superConstructorParameter: <null>
-          returnType: void
-''');
-  }
-
-  test_class_constructor_parameters_super_optionalNamed() async {
-    var library = await buildLibrary('''
-class A {
-  A({required int a, required double b});
-}
-
-class B extends A {
-  B({String o1, super.a, String o2, super.b}) : super();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredNamed default a @28
-                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-                  type: int
-                requiredNamed default b @47
-                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
-                  type: double
-        class B @61
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @77
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                optionalNamed default o1 @87
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1
-                  type: String
-                optionalNamed default final super.a @97
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
-                  type: int
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-                optionalNamed default o2 @107
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2
-                  type: String
-                optionalNamed default final super.b @117
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
-                  type: double
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_optionalNamed_defaultValue() async {
-    var library = await buildLibrary('''
-class A {
-  A({int a = 0});
-}
-
-class B extends A {
-  B({super.a});
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                optionalNamed default a @19
-                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 0 @23
-                      staticType: int
-        class B @37
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @53
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                optionalNamed default final hasDefaultValue super.a @62
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
-                  type: int
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_optionalNamed_unresolved() async {
-    var library = await buildLibrary('''
-class A {
-  A({required int a});
-}
-
-class B extends A {
-  B({super.b});
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredNamed default a @28
-                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-                  type: int
-        class B @42
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @58
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                optionalNamed default final super.b @67
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
-                  type: dynamic
-                  superConstructorParameter: <null>
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_optionalNamed_unresolved2() async {
-    var library = await buildLibrary('''
-class A {
-  A(int a);
-}
-
-class B extends A {
-  B({super.a});
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @18
-                  type: int
-        class B @31
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @47
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                optionalNamed default final super.a @56
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
-                  type: dynamic
-                  superConstructorParameter: <null>
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_optionalPositional() async {
-    var library = await buildLibrary('''
-class A {
-  A(int a, double b);
-}
-
-class B extends A {
-  B([String o1, super.a, String o2, super.b]) : super();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @18
-                  type: int
-                requiredPositional b @28
-                  type: double
-        class B @41
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @57
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                optionalPositional default o1 @67
-                  type: String
-                optionalPositional default final super.a @77
-                  type: int
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-                optionalPositional default o2 @87
-                  type: String
-                optionalPositional default final super.b @97
-                  type: double
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_requiredNamed() async {
-    var library = await buildLibrary('''
-class A {
-  A({required int a, required double b});
-}
-
-class B extends A {
-  B({
-    required String o1,
-    required super.a,
-    required String o2,
-    required super.b,
-  }) : super();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredNamed default a @28
-                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-                  type: int
-                requiredNamed default b @47
-                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
-                  type: double
-        class B @61
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @77
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredNamed default o1 @101
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o1
-                  type: String
-                requiredNamed default final super.a @124
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
-                  type: int
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-                requiredNamed default o2 @147
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::o2
-                  type: String
-                requiredNamed default final super.b @170
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::b
-                  type: double
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_requiredNamed_defaultValue() async {
-    var library = await buildLibrary('''
-class A {
-  A({int a = 0});
-}
-
-class B extends A {
-  B({required super.a});
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                optionalNamed default a @19
-                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 0 @23
-                      staticType: int
-        class B @37
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @53
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredNamed default final super.a @71
-                  reference: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
-                  type: int
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_requiredPositional() async {
-    var library = await buildLibrary('''
-class A {
-  A(int a, double b);
-}
-
-class B extends A {
-  B(String o1, super.a, String o2, super.b) : super();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @18
-                  type: int
-                requiredPositional b @28
-                  type: double
-        class B @41
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @57
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional o1 @66
-                  type: String
-                requiredPositional final super.a @76
-                  type: int
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-                requiredPositional o2 @86
-                  type: String
-                requiredPositional final super.b @96
-                  type: double
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::b
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_requiredPositional_inferenceOrder() async {
-    // It is important that `B` is declared after `C`, so that we check that
-    // inference happens in order - first `B`, then `C`.
-    var library = await buildLibrary('''
-abstract class A {
-  A(int a);
-}
-
-class C extends B {
-  C(super.a);
-}
-
-class B extends A {
-  B(super.a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class A @15
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @27
-                  type: int
-        class C @40
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: B
-          constructors
-            @56
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final super.a @64
-                  type: int
-                  superConstructorParameter: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
-              superConstructor: <testLibraryFragment>::@class::B::@constructor::new
-        class B @77
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @93
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional final super.a @101
-                  type: int
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_requiredPositional_inferenceOrder_generic() async {
-    // It is important that `C` is declared before `B`, so that we check that
-    // inference happens in order - first `B`, then `C`.
-    var library = await buildLibrary('''
-class A {
-  A(int a);
-}
-
-class C extends B<String> {
-  C(super.a);
-}
-
-class B<T> extends A {
-  B(super.a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @18
-                  type: int
-        class C @31
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: B<String>
-          constructors
-            @55
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final super.a @63
-                  type: int
-                  superConstructorParameter: SuperFormalParameterMember
-                    base: <testLibraryFragment>::@class::B::@constructor::new::@parameter::a
-                    substitution: {T: String}
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::B::@constructor::new
-                substitution: {T: String}
-        class B @76
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @78
-              defaultType: dynamic
-          supertype: A
-          constructors
-            @95
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional final super.a @103
-                  type: int
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_requiredPositional_unresolved() async {
-    var library = await buildLibrary('''
-class A {}
-
-class B extends A {
-  B(super.a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @18
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @34
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional final super.a @42
-                  type: dynamic
-                  superConstructorParameter: <null>
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_parameters_super_requiredPositional_unresolved2() async {
-    var library = await buildLibrary('''
-class A {
-  A({required int a})
-}
-
-class B extends A {
-  B(super.a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredNamed default a @28
-                  reference: <testLibraryFragment>::@class::A::@constructor::new::@parameter::a
-                  type: int
-        class B @41
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @57
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional final super.a @65
-                  type: dynamic
-                  superConstructorParameter: <null>
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_params() async {
-    var library = await buildLibrary('class C { C(x, int y); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @10
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional x @12
-                  type: dynamic
-                requiredPositional y @19
-                  type: int
-''');
-  }
-
-  test_class_constructor_redirected_factory_named() async {
-    var library = await buildLibrary('''
-class C {
-  factory C() = D.named;
-  C._();
-}
-class D extends C {
-  D.named() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            factory @20
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::named
-            _ @39
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 38
-              nameEnd: 40
-        class D @52
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          supertype: C
-          constructors
-            named @70
-              reference: <testLibraryFragment>::@class::D::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::D
-              periodOffset: 69
-              nameEnd: 75
-              superConstructor: <testLibraryFragment>::@class::C::@constructor::_
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_generic() async {
-    var library = await buildLibrary('''
-class C<T, U> {
-  factory C() = D<U, T>.named;
-  C._();
-}
-class D<T, U> extends C<U, T> {
-  D.named() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          constructors
-            factory @26
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::D::@constructor::named
-                substitution: {T: U, U: T}
-            _ @51
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 50
-              nameEnd: 52
-        class D @64
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @66
-              defaultType: dynamic
-            covariant U @69
-              defaultType: dynamic
-          supertype: C<U, T>
-          constructors
-            named @94
-              reference: <testLibraryFragment>::@class::D::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::D
-              periodOffset: 93
-              nameEnd: 99
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::C::@constructor::_
-                substitution: {T: U, U: T}
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_generic_viaTypeAlias() async {
-    var library = await buildLibrary('''
-typedef A<T, U> = C<T, U>;
-class B<T, U> {
-  factory B() = A<U, T>.named;
-  B._();
-}
-class C<T, U> extends A<U, T> {
-  C.named() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @33
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @35
-              defaultType: dynamic
-            covariant U @38
-              defaultType: dynamic
-          constructors
-            factory @53
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              redirectedConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::C::@constructor::named
-                substitution: {T: U, U: T}
-            _ @78
-              reference: <testLibraryFragment>::@class::B::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::B
-              periodOffset: 77
-              nameEnd: 79
-        class C @91
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @93
-              defaultType: dynamic
-            covariant U @96
-              defaultType: dynamic
-          supertype: C<U, T>
-            alias: <testLibraryFragment>::@typeAlias::A
-              typeArguments
-                U
-                T
-          constructors
-            named @121
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 120
-              nameEnd: 126
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-            covariant U @13
-              defaultType: dynamic
-          aliasedType: C<T, U>
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_imported() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-import 'test.dart';
-class D extends C {
-  D.named() : super._();
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart';
-class C {
-  factory C() = D.named;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @25
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            factory @39
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named
-            _ @58
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 57
-              nameEnd: 59
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_imported_generic() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-import 'test.dart';
-class D<T, U> extends C<U, T> {
-  D.named() : super._();
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart';
-class C<T, U> {
-  factory C() = D<U, T>.named;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @25
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @27
-              defaultType: dynamic
-            covariant U @30
-              defaultType: dynamic
-          constructors
-            factory @45
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: ConstructorMember
-                base: package:test/foo.dart::<fragment>::@class::D::@constructor::named
-                substitution: {T: U, U: T}
-            _ @70
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 69
-              nameEnd: 71
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_prefixed() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-import 'test.dart';
-class D extends C {
-  D.named() : super._();
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart' as foo;
-class C {
-  factory C() = foo.D.named;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @32
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            factory @46
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::named
-            _ @69
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 68
-              nameEnd: 70
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_prefixed_generic() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-import 'test.dart';
-class D<T, U> extends C<U, T> {
-  D.named() : super._();
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart' as foo;
-class C<T, U> {
-  factory C() = foo.D<U, T>.named;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @32
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @34
-              defaultType: dynamic
-            covariant U @37
-              defaultType: dynamic
-          constructors
-            factory @52
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: ConstructorMember
-                base: package:test/foo.dart::<fragment>::@class::D::@constructor::named
-                substitution: {T: U, U: T}
-            _ @81
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 80
-              nameEnd: 82
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_unresolved_class() async {
-    var library = await buildLibrary('''
-class C<E> {
-  factory C() = D.named<E>;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant E @8
-              defaultType: dynamic
-          constructors
-            factory @23
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_constructor_redirected_factory_named_unresolved_constructor() async {
-    var library = await buildLibrary('''
-class D {}
-class C<E> {
-  factory C() = D.named<E>;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class D @6
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class C @17
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant E @19
-              defaultType: dynamic
-          constructors
-            factory @34
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed() async {
-    var library = await buildLibrary('''
-class C {
-  factory C() = D;
-  C._();
-}
-class D extends C {
-  D() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            factory @20
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::new
-            _ @33
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 32
-              nameEnd: 34
-        class D @46
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          supertype: C
-          constructors
-            @62
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-              superConstructor: <testLibraryFragment>::@class::C::@constructor::_
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_generic() async {
-    var library = await buildLibrary('''
-class C<T, U> {
-  factory C() = D<U, T>;
-  C._();
-}
-class D<T, U> extends C<U, T> {
-  D() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          constructors
-            factory @26
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::D::@constructor::new
-                substitution: {T: U, U: T}
-            _ @45
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 44
-              nameEnd: 46
-        class D @58
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @60
-              defaultType: dynamic
-            covariant U @63
-              defaultType: dynamic
-          supertype: C<U, T>
-          constructors
-            @86
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::C::@constructor::_
-                substitution: {T: U, U: T}
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_generic_viaTypeAlias() async {
-    var library = await buildLibrary('''
-typedef A<T, U> = C<T, U>;
-class B<T, U> {
-  factory B() = A<U, T>;
-  B_();
-}
-class C<T, U> extends B<U, T> {
-  C() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @33
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @35
-              defaultType: dynamic
-            covariant U @38
-              defaultType: dynamic
-          constructors
-            factory @53
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              redirectedConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::C::@constructor::new
-                substitution: {T: U, U: T}
-          methods
-            abstract B_ @70
-              reference: <testLibraryFragment>::@class::B::@method::B_
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: dynamic
-        class C @84
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @86
-              defaultType: dynamic
-            covariant U @89
-              defaultType: dynamic
-          supertype: B<U, T>
-          constructors
-            @112
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-            covariant U @13
-              defaultType: dynamic
-          aliasedType: C<T, U>
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_imported() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-import 'test.dart';
-class D extends C {
-  D() : super._();
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart';
-class C {
-  factory C() = D;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @25
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            factory @39
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new
-            _ @52
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 51
-              nameEnd: 53
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_imported_generic() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-import 'test.dart';
-class D<T, U> extends C<U, T> {
-  D() : super._();
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart';
-class C<T, U> {
-  factory C() = D<U, T>;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @25
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @27
-              defaultType: dynamic
-            covariant U @30
-              defaultType: dynamic
-          constructors
-            factory @45
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: ConstructorMember
-                base: package:test/foo.dart::<fragment>::@class::D::@constructor::new
-                substitution: {T: U, U: T}
-            _ @64
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 63
-              nameEnd: 65
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_imported_viaTypeAlias() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-import 'test.dart';
-typedef A = B;
-class B extends C {
-  B() : super._();
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart';
-class C {
-  factory C() = A;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @25
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            factory @39
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: package:test/foo.dart::<fragment>::@class::B::@constructor::new
-            _ @52
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 51
-              nameEnd: 53
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_prefixed() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-import 'test.dart';
-class D extends C {
-  D() : super._();
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart' as foo;
-class C {
-  factory C() = foo.D;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @32
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            factory @46
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: package:test/foo.dart::<fragment>::@class::D::@constructor::new
-            _ @63
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 62
-              nameEnd: 64
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_prefixed_generic() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-import 'test.dart';
-class D<T, U> extends C<U, T> {
-  D() : super._();
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart' as foo;
-class C<T, U> {
-  factory C() = foo.D<U, T>;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @32
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @34
-              defaultType: dynamic
-            covariant U @37
-              defaultType: dynamic
-          constructors
-            factory @52
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: ConstructorMember
-                base: package:test/foo.dart::<fragment>::@class::D::@constructor::new
-                substitution: {T: U, U: T}
-            _ @75
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 74
-              nameEnd: 76
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_prefixed_viaTypeAlias() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-import 'test.dart';
-typedef A = B;
-class B extends C {
-  B() : super._();
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart' as foo;
-class C {
-  factory C() = foo.A;
-  C._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @32
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            factory @46
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: package:test/foo.dart::<fragment>::@class::B::@constructor::new
-            _ @63
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 62
-              nameEnd: 64
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_unresolved() async {
-    var library = await buildLibrary('''
-class C<E> {
-  factory C() = D<E>;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant E @8
-              defaultType: dynamic
-          constructors
-            factory @23
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_constructor_redirected_factory_unnamed_viaTypeAlias() async {
-    var library = await buildLibrary('''
-typedef A = C;
-class B {
-  factory B() = A;
-  B._();
-}
-class C extends B {
-  C() : super._();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @21
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            factory @35
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
-            _ @48
-              reference: <testLibraryFragment>::@class::B::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::B
-              periodOffset: 47
-              nameEnd: 49
-        class C @61
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: B
-          constructors
-            @77
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::B::@constructor::_
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: C
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_named() async {
-    var library = await buildLibrary('''
-class C {
-  const C.named();
-  const C() : this.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const named @20
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 19
-              nameEnd: 25
-            const @37
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                RedirectingConstructorInvocation
-                  thisKeyword: this @43
-                  period: . @47
-                  constructorName: SimpleIdentifier
-                    token: named @48
-                    staticElement: <testLibraryFragment>::@class::C::@constructor::named
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @53
-                    rightParenthesis: ) @54
-                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
-              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_named_generic() async {
-    var library = await buildLibrary('''
-class C<T> {
-  const C.named();
-  const C() : this.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const named @23
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 22
-              nameEnd: 28
-            const @40
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                RedirectingConstructorInvocation
-                  thisKeyword: this @46
-                  period: . @50
-                  constructorName: SimpleIdentifier
-                    token: named @51
-                    staticElement: <testLibraryFragment>::@class::C::@constructor::named
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @56
-                    rightParenthesis: ) @57
-                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
-              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_named_notConst() async {
-    var library = await buildLibrary('''
-class C {
-  C.named();
-  C() : this.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            named @14
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 13
-              nameEnd: 19
-            @25
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::named
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_unnamed() async {
-    var library = await buildLibrary('''
-class C {
-  const C();
-  const C.named() : this();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-            const named @33
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 32
-              nameEnd: 38
-              constantInitializers
-                RedirectingConstructorInvocation
-                  thisKeyword: this @43
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @47
-                    rightParenthesis: ) @48
-                  staticElement: <testLibraryFragment>::@class::C::@constructor::new
-              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_unnamed_generic() async {
-    var library = await buildLibrary('''
-class C<T> {
-  const C();
-  const C.named() : this();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-            const named @36
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 35
-              nameEnd: 41
-              constantInitializers
-                RedirectingConstructorInvocation
-                  thisKeyword: this @46
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @50
-                    rightParenthesis: ) @51
-                  staticElement: <testLibraryFragment>::@class::C::@constructor::new
-              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
-''');
-  }
-
-  test_class_constructor_redirected_thisInvocation_unnamed_notConst() async {
-    var library = await buildLibrary('''
-class C {
-  C();
-  C.named() : this();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-            named @21
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 20
-              nameEnd: 26
-              redirectedConstructor: <testLibraryFragment>::@class::C::@constructor::new
-''');
-  }
-
-  test_class_constructor_superConstructor_generic_named() async {
-    var library = await buildLibrary('''
-class A<T> {
-  A.named(T a);
-}
-class B extends A<int> {
-  B() : super.named(0);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            named @17
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 16
-              nameEnd: 22
-              parameters
-                requiredPositional a @25
-                  type: T
-        class B @37
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A<int>
-          constructors
-            @58
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::named
-                substitution: {T: int}
-''');
-  }
-
-  test_class_constructor_superConstructor_notGeneric_named() async {
-    var library = await buildLibrary('''
-class A {
-  A.named();
-}
-class B extends A {
-  B() : super.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            named @14
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 13
-              nameEnd: 19
-        class B @31
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @47
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::named
-''');
-  }
-
-  test_class_constructor_superConstructor_notGeneric_unnamed_explicit() async {
-    var library = await buildLibrary('''
-class A {}
-class B extends A {
-  B() : super();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @17
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @33
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_superConstructor_notGeneric_unnamed_implicit() async {
-    var library = await buildLibrary('''
-class A {}
-class B extends A {
-  B();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @17
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @33
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_superConstructor_notGeneric_unnamed_implicit2() async {
-    var library = await buildLibrary('''
-class A {}
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @17
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_constructor_unnamed_implicit() async {
-    var library = await buildLibrary('class C {}');
-    configuration.withDisplayName = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              displayName: C
-''');
-  }
-
-  test_class_constructor_withCycles_const() async {
-    var library = await buildLibrary('''
-class C {
-  final x;
-  const C() : x = const D();
-}
-class D {
-  final x;
-  const D() : x = const C();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            const @29
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: x @35
-                    staticElement: <testLibraryFragment>::@class::C::@field::x
-                    staticType: null
-                  equals: = @37
-                  expression: InstanceCreationExpression
-                    keyword: const @39
-                    constructorName: ConstructorName
-                      type: NamedType
-                        name: D @45
-                        element: <testLibraryFragment>::@class::D
-                        type: D
-                      staticElement: <testLibraryFragment>::@class::D::@constructor::new
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @46
-                      rightParenthesis: ) @47
-                    staticType: D
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-        class D @58
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @70
-              reference: <testLibraryFragment>::@class::D::@field::x
-              enclosingElement: <testLibraryFragment>::@class::D
-              type: dynamic
-          constructors
-            const @81
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: x @87
-                    staticElement: <testLibraryFragment>::@class::D::@field::x
-                    staticType: null
-                  equals: = @89
-                  expression: InstanceCreationExpression
-                    keyword: const @91
-                    constructorName: ConstructorName
-                      type: NamedType
-                        name: C @97
-                        element: <testLibraryFragment>::@class::C
-                        type: C
-                      staticElement: <testLibraryFragment>::@class::C::@constructor::new
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @98
-                      rightParenthesis: ) @99
-                    staticType: C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::D::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::D
-              returnType: dynamic
-''');
-  }
-
-  test_class_constructor_withCycles_nonConst() async {
-    var library = await buildLibrary('''
-class C {
-  final x;
-  C() : x = new D();
-}
-class D {
-  final x;
-  D() : x = new C();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @23
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-        class D @50
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @62
-              reference: <testLibraryFragment>::@class::D::@field::x
-              enclosingElement: <testLibraryFragment>::@class::D
-              type: dynamic
-          constructors
-            @67
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::D::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::D
-              returnType: dynamic
-''');
-  }
-
-  test_class_constructors_named() async {
-    var library = await buildLibrary('''
-class C {
-  C.foo();
-}
-''');
-    configuration.withDisplayName = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            foo @14
-              reference: <testLibraryFragment>::@class::C::@constructor::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              displayName: C.foo
-              periodOffset: 13
-              nameEnd: 17
-''');
-  }
-
-  test_class_constructors_unnamed() async {
-    var library = await buildLibrary('''
-class C {
-  C();
-}
-''');
-    configuration.withDisplayName = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              displayName: C
-''');
-  }
-
-  test_class_constructors_unnamed_new() async {
-    var library = await buildLibrary('''
-class C {
-  C.new();
-}
-''');
-    configuration.withDisplayName = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @14
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              displayName: C
-              periodOffset: 13
-              nameEnd: 17
-''');
-  }
-
-  test_class_documented() async {
-    var library = await buildLibrary('''
-/**
- * Docs
- */
-class C {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * Docs\n */
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_documented_mix() async {
-    var library = await buildLibrary('''
-/**
- * aaa
- */
-/**
- * bbb
- */
-class A {}
-
-/**
- * aaa
- */
-/// bbb
-/// ccc
-class B {}
-
-/// aaa
-/// bbb
-/**
- * ccc
- */
-class C {}
-
-/// aaa
-/// bbb
-/**
- * ccc
- */
-/// ddd
-class D {}
-
-/**
- * aaa
- */
-// bbb
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @36
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * bbb\n */
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @79
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// bbb\n/// ccc
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @122
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * ccc\n */
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @173
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// ddd
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @207
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * aaa\n */
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-''');
-  }
-
-  test_class_documented_tripleSlash() async {
-    var library = await buildLibrary('''
-/// first
-/// second
-/// third
-class C {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @37
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// first\n/// second\n/// third
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_documented_with_references() async {
-    var library = await buildLibrary('''
-/**
- * Docs referring to [D] and [E]
- */
-class C {}
-
-class D {}
-class E {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @47
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * Docs referring to [D] and [E]\n */
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @59
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @70
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-''');
-  }
-
-  test_class_documented_with_windows_line_endings() async {
-    var library = await buildLibrary('/**\r\n * Docs\r\n */\r\nclass C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @25
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * Docs\n */
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_documented_withLeadingNotDocumentation() async {
-    var library = await buildLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-class C {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @66
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * Docs\n */
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_documented_withMetadata() async {
-    var library = await buildLibrary('''
-/// Comment 1
-/// Comment 2
-@Annotation()
-class BeforeMeta {}
-
-/// Comment 1
-/// Comment 2
-@Annotation.named()
-class BeforeMetaNamed {}
-
-@Annotation()
-/// Comment 1
-/// Comment 2
-class AfterMeta {}
-
-/// Comment 1
-@Annotation()
-/// Comment 2
-class AroundMeta {}
-
-/// Doc comment.
-@Annotation()
-// Not doc comment.
-class DocBeforeMetaNotDocAfter {}
-
-class Annotation {
-  const Annotation();
-  const Annotation.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class BeforeMeta @48
-          reference: <testLibraryFragment>::@class::BeforeMeta
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1\n/// Comment 2
-          metadata
-            Annotation
-              atSign: @ @28
-              name: SimpleIdentifier
-                token: Annotation @29
-                staticElement: <testLibraryFragment>::@class::Annotation
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @39
-                rightParenthesis: ) @40
-              element: <testLibraryFragment>::@class::Annotation::@constructor::new
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::BeforeMeta::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::BeforeMeta
-        class BeforeMetaNamed @117
-          reference: <testLibraryFragment>::@class::BeforeMetaNamed
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1\n/// Comment 2
-          metadata
-            Annotation
-              atSign: @ @91
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: Annotation @92
-                  staticElement: <testLibraryFragment>::@class::Annotation
-                  staticType: null
-                period: . @102
-                identifier: SimpleIdentifier
-                  token: named @103
-                  staticElement: <testLibraryFragment>::@class::Annotation::@constructor::named
-                  staticType: null
-                staticElement: <testLibraryFragment>::@class::Annotation::@constructor::named
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @108
-                rightParenthesis: ) @109
-              element: <testLibraryFragment>::@class::Annotation::@constructor::named
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::BeforeMetaNamed::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::BeforeMetaNamed
-        class AfterMeta @185
-          reference: <testLibraryFragment>::@class::AfterMeta
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1\n/// Comment 2
-          metadata
-            Annotation
-              atSign: @ @137
-              name: SimpleIdentifier
-                token: Annotation @138
-                staticElement: <testLibraryFragment>::@class::Annotation
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @148
-                rightParenthesis: ) @149
-              element: <testLibraryFragment>::@class::Annotation::@constructor::new
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::AfterMeta::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::AfterMeta
-        class AroundMeta @247
-          reference: <testLibraryFragment>::@class::AroundMeta
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 2
-          metadata
-            Annotation
-              atSign: @ @213
-              name: SimpleIdentifier
-                token: Annotation @214
-                staticElement: <testLibraryFragment>::@class::Annotation
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @224
-                rightParenthesis: ) @225
-              element: <testLibraryFragment>::@class::Annotation::@constructor::new
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::AroundMeta::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::AroundMeta
-        class DocBeforeMetaNotDocAfter @319
-          reference: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Doc comment.
-          metadata
-            Annotation
-              atSign: @ @279
-              name: SimpleIdentifier
-                token: Annotation @280
-                staticElement: <testLibraryFragment>::@class::Annotation
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @290
-                rightParenthesis: ) @291
-              element: <testLibraryFragment>::@class::Annotation::@constructor::new
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::DocBeforeMetaNotDocAfter
-        class Annotation @354
-          reference: <testLibraryFragment>::@class::Annotation
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @375
-              reference: <testLibraryFragment>::@class::Annotation::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::Annotation
-            const named @408
-              reference: <testLibraryFragment>::@class::Annotation::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::Annotation
-              periodOffset: 407
-              nameEnd: 413
-''');
-  }
-
-  test_class_field_abstract() async {
-    var library = await buildLibrary('''
-abstract class C {
-  abstract int i;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class C @15
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            abstract i @34
-              reference: <testLibraryFragment>::@class::C::@field::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic abstract get i @-1
-              reference: <testLibraryFragment>::@class::C::@getter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic abstract set i= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _i @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_field_const() async {
-    var library = await buildLibrary('class C { static const int i = 0; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const i @27
-              reference: <testLibraryFragment>::@class::C::@field::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @31
-                  staticType: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get i @-1
-              reference: <testLibraryFragment>::@class::C::@getter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_field_const_late() async {
-    var library =
-        await buildLibrary('class C { static late const int i = 0; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static late const i @32
-              reference: <testLibraryFragment>::@class::C::@field::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @36
-                  staticType: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get i @-1
-              reference: <testLibraryFragment>::@class::C::@getter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_field_covariant() async {
-    var library = await buildLibrary('''
-class C {
-  covariant int x;
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            covariant x @26
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional covariant _x @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_field_documented() async {
-    var library = await buildLibrary('''
-class C {
-  /**
-   * Docs
-   */
-  var x;
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @38
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /**\n   * Docs\n   */
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_field_duplicate_getter() async {
-    var library = await buildLibrary('''
-class C {
-  int foo = 0;
-  int get foo => 0;
-}
-''');
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            foo @16
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              id: field_1
-              getter: getter_1
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::C::@getter::foo::@def::0
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-            get foo @35
-              reference: <testLibraryFragment>::@class::C::@getter::foo::@def::1
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-              id: getter_1
-              variable: field_1
-''');
-  }
-
-  test_class_field_duplicate_setter() async {
-    var library = await buildLibrary('''
-class C {
-  int foo = 0;
-  set foo(int _) {}
-}
-''');
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            foo @16
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              id: field_1
-              setter: setter_1
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::C::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::foo::@def::0
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-            set foo= @31
-              reference: <testLibraryFragment>::@class::C::@setter::foo::@def::1
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _ @39
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-''');
-  }
-
-  test_class_field_external() async {
-    var library = await buildLibrary('''
-abstract class C {
-  external int i;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class C @15
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            external i @34
-              reference: <testLibraryFragment>::@class::C::@field::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get i @-1
-              reference: <testLibraryFragment>::@class::C::@getter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set i= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _i @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_field_final_hasInitializer_hasConstConstructor() async {
-    var library = await buildLibrary('''
-class C {
-  final x = 42;
-  const C();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 42 @22
-                  staticType: int
-          constructors
-            const @34
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_field_final_hasInitializer_hasConstConstructor_genericFunctionType() async {
-    var library = await buildLibrary('''
-class A<T> {
-  const A();
-}
-class B {
-  final f = const A<int Function(double a)>();
-  const B();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @34
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          fields
-            final f @46
-              reference: <testLibraryFragment>::@class::B::@field::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: A<int Function(double)>
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  keyword: const @50
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @56
-                      typeArguments: TypeArgumentList
-                        leftBracket: < @57
-                        arguments
-                          GenericFunctionType
-                            returnType: NamedType
-                              name: int @58
-                              element: dart:core::<fragment>::@class::int
-                              type: int
-                            functionKeyword: Function @62
-                            parameters: FormalParameterList
-                              leftParenthesis: ( @70
-                              parameter: SimpleFormalParameter
-                                type: NamedType
-                                  name: double @71
-                                  element: dart:core::<fragment>::@class::double
-                                  type: double
-                                name: a @78
-                                declaredElement: a@78
-                                  type: double
-                              rightParenthesis: ) @79
-                            declaredElement: GenericFunctionTypeElement
-                              parameters
-                                a
-                                  kind: required positional
-                                  type: double
-                              returnType: int
-                              type: int Function(double)
-                            type: int Function(double)
-                        rightBracket: > @80
-                      element: <testLibraryFragment>::@class::A
-                      type: A<int Function(double)>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@class::A::@constructor::new
-                      substitution: {T: int Function(double)}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @81
-                    rightParenthesis: ) @82
-                  staticType: A<int Function(double)>
-          constructors
-            const @93
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::B::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: A<int Function(double)>
-''');
-  }
-
-  test_class_field_final_hasInitializer_noConstConstructor() async {
-    var library = await buildLibrary('''
-class C {
-  final x = 42;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_field_final_withSetter() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int foo;
-  A(this.foo);
-  set foo(int newValue) {}
-}
-''');
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final foo @22
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          constructors
-            @29
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional final this.foo @36
-                  type: int
-                  field: <testLibraryFragment>::@class::A::@field::foo
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            set foo= @48
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional newValue @56
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-''');
-  }
-
-  test_class_field_formal_param_inferred_type_implicit() async {
-    var library = await buildLibrary('class C extends D { var v; C(this.v); }'
-        ' abstract class D { int get v; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          fields
-            v @24
-              reference: <testLibraryFragment>::@class::C::@field::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            @27
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.v @34
-                  type: int
-                  field: <testLibraryFragment>::@class::C::@field::v
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-          accessors
-            synthetic get v @-1
-              reference: <testLibraryFragment>::@class::C::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set v= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _v @-1
-                  type: int
-              returnType: void
-        abstract class D @55
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic v @-1
-              reference: <testLibraryFragment>::@class::D::@field::v
-              enclosingElement: <testLibraryFragment>::@class::D
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          accessors
-            abstract get v @67
-              reference: <testLibraryFragment>::@class::D::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::D
-              returnType: int
-''');
-  }
-
-  test_class_field_implicit_type() async {
-    var library = await buildLibrary('class C { var x; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_field_implicit_type_late() async {
-    var library = await buildLibrary('class C { late var x; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            late x @19
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_field_inferred_type_nonStatic_explicit_initialized() async {
-    var library = await buildLibrary('class C { num v = 0; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            v @14
-              reference: <testLibraryFragment>::@class::C::@field::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: num
-              shouldUseTypeForInitializerInference: true
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get v @-1
-              reference: <testLibraryFragment>::@class::C::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: num
-            synthetic set v= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _v @-1
-                  type: num
-              returnType: void
-''');
-  }
-
-  test_class_field_inferred_type_nonStatic_implicit_initialized() async {
-    var library = await buildLibrary('class C { var v = 0; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            v @14
-              reference: <testLibraryFragment>::@class::C::@field::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get v @-1
-              reference: <testLibraryFragment>::@class::C::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set v= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _v @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_field_inferred_type_nonStatic_implicit_uninitialized() async {
-    var library = await buildLibrary(
-        'class C extends D { var v; } abstract class D { int get v; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          fields
-            v @24
-              reference: <testLibraryFragment>::@class::C::@field::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-          accessors
-            synthetic get v @-1
-              reference: <testLibraryFragment>::@class::C::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set v= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _v @-1
-                  type: int
-              returnType: void
-        abstract class D @44
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic v @-1
-              reference: <testLibraryFragment>::@class::D::@field::v
-              enclosingElement: <testLibraryFragment>::@class::D
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          accessors
-            abstract get v @56
-              reference: <testLibraryFragment>::@class::D::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::D
-              returnType: int
-''');
-  }
-
-  test_class_field_inferred_type_nonStatic_inherited_resolveInitializer() async {
-    var library = await buildLibrary(r'''
-const a = 0;
-abstract class A {
-  const A();
-  List<int> get f;
-}
-class B extends A {
-  const B();
-  final f = [a];
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class A @28
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic f @-1
-              reference: <testLibraryFragment>::@class::A::@field::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: List<int>
-          constructors
-            const @40
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            abstract get f @61
-              reference: <testLibraryFragment>::@class::A::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: List<int>
-        class B @72
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          fields
-            final f @107
-              reference: <testLibraryFragment>::@class::B::@field::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: List<int>
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @111
-                  elements
-                    SimpleIdentifier
-                      token: a @112
-                      staticElement: <testLibraryFragment>::@getter::a
-                      staticType: int
-                  rightBracket: ] @113
-                  staticType: List<int>
-          constructors
-            const @94
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::B::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: List<int>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @10
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_class_field_inferred_type_static_implicit_initialized() async {
-    var library = await buildLibrary('class C { static var v = 0; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static v @21
-              reference: <testLibraryFragment>::@class::C::@field::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@class::C::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic static set v= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _v @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_field_inheritedContextType_double() async {
-    var library = await buildLibrary('''
-abstract class A {
-  const A();
-  double get foo;
-}
-class B extends A {
-  const B();
-  final foo = 2;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class A @15
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: double
-          constructors
-            const @27
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            abstract get foo @45
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: double
-        class B @58
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          fields
-            final foo @93
-              reference: <testLibraryFragment>::@class::B::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: double
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 2 @99
-                  staticType: double
-          constructors
-            const @80
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::B::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: double
-''');
-  }
-
-  test_class_field_isPromotable_hasGetter() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-class B {
-  int? get _foo => 0;
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-  fieldNameNonPromotabilityInfo
-    _foo
-      conflictingGetters
-        <testLibraryFragment>::@class::B::@getter::_foo
-''');
-  }
-
-  test_class_field_isPromotable_hasGetter_abstract() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-abstract class B {
-  int? get _foo;
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-''');
-  }
-
-  test_class_field_isPromotable_hasGetter_inPart() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-part of 'test.dart';
-class B {
-  int? get _foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-part 'a.dart';
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @21
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final _foo @38
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  fieldNameNonPromotabilityInfo
-    _foo
-      conflictingGetters
-        <testLibrary>::@fragment::package:test/a.dart::@class::B::@getter::_foo
-''');
-  }
-
-  test_class_field_isPromotable_hasGetter_static() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-class B {
-  static int? get _foo => 0;
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-''');
-  }
-
-  test_class_field_isPromotable_hasNotFinalField() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-class B {
-  int? _foo;
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-  fieldNameNonPromotabilityInfo
-    _foo
-      conflictingFields
-        <testLibraryFragment>::@class::B::@field::_foo
-''');
-  }
-
-  test_class_field_isPromotable_hasNotFinalField_static() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-class B {
-  static int? _foo;
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-''');
-  }
-
-  test_class_field_isPromotable_hasSetter() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-class B {
-  set _field(int? _) {}
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-''');
-  }
-
-  test_class_field_isPromotable_language217() async {
-    var library = await buildLibrary(r'''
-// @dart = 2.19
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @22
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final _foo @39
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-''');
-  }
-
-  test_class_field_isPromotable_noSuchMethodForwarder_field() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-class B {
-  final int? _foo = 0;
-}
-
-/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
-class C implements B {
-  dynamic noSuchMethod(Invocation invocation) {}
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-  fieldNameNonPromotabilityInfo
-    _foo
-      conflictingNsmClasses
-        <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_field_isPromotable_noSuchMethodForwarder_field_implementedInMixin() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-mixin M {
-  final int? _foo = 0;
-}
-
-class B {
-  final int? _foo = 0;
-}
-
-/// `_foo` is implemented in [M].
-class C with M implements B {
-  dynamic noSuchMethod(Invocation invocation) {}
-}
-''');
-
-    configuration.forPromotableFields(
-      classNames: {'A', 'B'},
-      mixinNames: {'M'},
-    );
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-        class B @90
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _foo @107
-              reference: <testLibraryFragment>::@class::B::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: int?
-              shouldUseTypeForInitializerInference: true
-      mixins
-        mixin M @54
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            final promotable _foo @71
-              reference: <testLibraryFragment>::@mixin::M::@field::_foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int?
-              shouldUseTypeForInitializerInference: true
-''');
-  }
-
-  test_class_field_isPromotable_noSuchMethodForwarder_field_implementedInSuperclass() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-class B {
-  final int? _foo = 0;
-}
-
-class C {
-  final int? _foo = 0;
-}
-
-/// `_foo` is implemented in [B].
-class D extends B implements C {
-  dynamic noSuchMethod(Invocation invocation) {}
-}
-''');
-
-    configuration.forPromotableFields(
-      classNames: {'A', 'B'},
-    );
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-        class B @54
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _foo @71
-              reference: <testLibraryFragment>::@class::B::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: int?
-              shouldUseTypeForInitializerInference: true
-''');
-  }
-
-  test_class_field_isPromotable_noSuchMethodForwarder_field_inClassTypeAlias() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-class B {
-  final int? _foo = 0;
-}
-
-mixin M {
-  dynamic noSuchMethod(Invocation invocation) {}
-}
-
-/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
-class E = Object with M implements B;
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-  fieldNameNonPromotabilityInfo
-    _foo
-      conflictingNsmClasses
-        <testLibraryFragment>::@class::E
-''');
-  }
-
-  test_class_field_isPromotable_noSuchMethodForwarder_field_inEnum() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-class B {
-  final int? _foo = 0;
-}
-
-/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
-enum E implements B {
-  v;
-  dynamic noSuchMethod(Invocation invocation) {}
-}
-''');
-
-    configuration.forPromotableFields(
-      classNames: {'A', 'B'},
-    );
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-        class B @54
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          fields
-            final _foo @71
-              reference: <testLibraryFragment>::@class::B::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: int?
-              shouldUseTypeForInitializerInference: true
-  fieldNameNonPromotabilityInfo
-    _foo
-      conflictingNsmClasses
-        <testLibraryFragment>::@enum::E
-''');
-  }
-
-  test_class_field_isPromotable_noSuchMethodForwarder_getter() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-abstract class B {
-  int? get _foo;
-}
-
-/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
-class C implements B {
-  dynamic noSuchMethod(Invocation invocation) {}
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-  fieldNameNonPromotabilityInfo
-    _foo
-      conflictingNsmClasses
-        <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_field_isPromotable_noSuchMethodForwarder_inDifferentLibrary() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class B {
-  int? get _foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import 'a.dart';
-
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-/// Has a noSuchMethod thrower for B._field, but since private names in
-/// different libraries are distinct, this has no effect on promotion of
-/// C._field.
-class C implements B {
-  dynamic noSuchMethod(Invocation invocation) {}
-}
-''');
-
-    configuration.forPromotableFields(
-      classNames: {'A'},
-    );
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class A @24
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _foo @41
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-''');
-  }
-
-  test_class_field_isPromotable_noSuchMethodForwarder_inheritedInterface() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-class B extends A {
-  A(super.value);
-}
-
-/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
-class C implements B {
-  dynamic noSuchMethod(Invocation invocation) {}
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-  fieldNameNonPromotabilityInfo
-    _foo
-      conflictingNsmClasses
-        <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_field_isPromotable_noSuchMethodForwarder_mixedInterface() async {
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-mixin M {
-  final int? _foo = 0;
-}
-
-class B with M {}
-
-/// Implicitly implements `_foo` as a getter that forwards to [noSuchMethod].
-class C implements B {
-  dynamic noSuchMethod(Invocation invocation) {}
-}
-''');
-
-    configuration.forPromotableFields(
-      classNames: {'A'},
-      mixinNames: {'M'},
-    );
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-      mixins
-        mixin M @54
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            final _foo @71
-              reference: <testLibraryFragment>::@mixin::M::@field::_foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int?
-              shouldUseTypeForInitializerInference: true
-  fieldNameNonPromotabilityInfo
-    _foo
-      conflictingNsmClasses
-        <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_field_isPromotable_noSuchMethodForwarder_unusedMixin() async {
-    // Mixins are implicitly abstract so the presence of a mixin that inherits
-    // a field into its interface, and doesn't implement it, doesn't mean that
-    // a noSuchMethod forwarder created for it. So,  this does not block that
-    // field from promoting.
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  A(this._foo);
-}
-
-mixin M implements A {
-  dynamic noSuchMethod(Invocation invocation) {}
-}
-''');
-
-    configuration.forPromotableFields(
-      classNames: {'A'},
-    );
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-''');
-  }
-
-  test_class_field_isPromotable_notFinal() async {
-    var library = await buildLibrary(r'''
-class A {
-  int? _foo;
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            _foo @17
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-  fieldNameNonPromotabilityInfo
-    _foo
-      conflictingFields
-        <testLibraryFragment>::@class::A::@field::_foo
-''');
-  }
-
-  test_class_field_isPromotable_notPrivate() async {
-    var library = await buildLibrary(r'''
-class A {
-  int? field;
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            field @17
-              reference: <testLibraryFragment>::@class::A::@field::field
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-''');
-  }
-
-  test_class_field_isPromotable_typeInference() async {
-    // We decide that `_foo` is promotable before inferring the type of `bar`.
-    var library = await buildLibrary(r'''
-class A {
-  final int? _foo;
-  final bar = _foo != null ? _foo : 0;
-  A(this._foo);
-}
-''');
-
-    configuration.forPromotableFields(classNames: {'A'});
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final promotable _foo @23
-              reference: <testLibraryFragment>::@class::A::@field::_foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int?
-            final bar @37
-              reference: <testLibraryFragment>::@class::A::@field::bar
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: false
-''');
-  }
-
-  test_class_field_propagatedType_const_noDep() async {
-    var library = await buildLibrary('''
-class C {
-  static const x = 0;
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const x @25
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @29
-                  staticType: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_field_propagatedType_final_dep_inLib() async {
-    addSource('$testPackageLibPath/a.dart', 'final a = 1;');
-    var library = await buildLibrary('''
-import "a.dart";
-class C {
-  final b = a / 2;
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @23
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final b @35
-              reference: <testLibraryFragment>::@class::C::@field::b
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: double
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get b @-1
-              reference: <testLibraryFragment>::@class::C::@getter::b
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: double
-''');
-  }
-
-  test_class_field_propagatedType_final_dep_inPart() async {
-    addSource('$testPackageLibPath/a.dart', 'part of lib; final a = 1;');
-    var library = await buildLibrary('''
-library lib;
-part "a.dart";
-class C {
-  final b = a / 2;
-}''');
-    checkElementText(library, r'''
-library
-  name: lib
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        class C @34
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final b @46
-              reference: <testLibraryFragment>::@class::C::@field::b
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: double
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get b @-1
-              reference: <testLibraryFragment>::@class::C::@getter::b
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: double
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static final a @19
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::a
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::a
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-''');
-  }
-
-  test_class_field_propagatedType_final_noDep_instance() async {
-    var library = await buildLibrary('''
-class C {
-  final x = 0;
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_field_propagatedType_final_noDep_static() async {
-    var library = await buildLibrary('''
-class C {
-  static final x = 0;
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static final x @25
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_field_static() async {
-    var library = await buildLibrary('class C { static int i; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static i @21
-              reference: <testLibraryFragment>::@class::C::@field::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get i @-1
-              reference: <testLibraryFragment>::@class::C::@getter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic static set i= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _i @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_field_static_final_hasConstConstructor() async {
-    var library = await buildLibrary('''
-class C {
-  static final f = 0;
-  const C();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static final f @25
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            const @40
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get f @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_field_static_final_untyped() async {
-    var library = await buildLibrary('class C { static final x = 0; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static final x @23
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_field_static_late() async {
-    var library = await buildLibrary('class C { static late int i; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static late i @26
-              reference: <testLibraryFragment>::@class::C::@field::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get i @-1
-              reference: <testLibraryFragment>::@class::C::@getter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic static set i= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _i @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_field_type_explicit() async {
-    var library = await buildLibrary(r'''
-class C {
-  int a = 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            a @16
-              reference: <testLibraryFragment>::@class::C::@field::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get a @-1
-              reference: <testLibraryFragment>::@class::C::@getter::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set a= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _a @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_field_type_inferred_fromInitializer() async {
-    var library = await buildLibrary(r'''
-class C {
-  var foo = 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            foo @16
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::C::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_field_type_inferred_fromSuper() async {
-    var library = await buildLibrary(r'''
-abstract class A {
-  int get foo;
-}
-
-class B extends A {
-  final foo = 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class A @15
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            abstract get foo @29
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-        class B @43
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          fields
-            final foo @65
-              reference: <testLibraryFragment>::@class::B::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: int
-              shouldUseTypeForInitializerInference: true
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::B::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: int
-''');
-  }
-
-  test_class_field_type_inferred_Never() async {
-    var library = await buildLibrary(r'''
-class C {
-  var a = throw 42;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            a @16
-              reference: <testLibraryFragment>::@class::C::@field::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: Never
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get a @-1
-              reference: <testLibraryFragment>::@class::C::@getter::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: Never
-            synthetic set a= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _a @-1
-                  type: Never
-              returnType: void
-''');
-  }
-
-  test_class_field_typed() async {
-    var library = await buildLibrary('class C { int x = 0; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_field_untyped() async {
-    var library = await buildLibrary('class C { var x = 0; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @14
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_fields() async {
-    var library = await buildLibrary('class C { int i; int j; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            i @14
-              reference: <testLibraryFragment>::@class::C::@field::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-            j @21
-              reference: <testLibraryFragment>::@class::C::@field::j
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get i @-1
-              reference: <testLibraryFragment>::@class::C::@getter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set i= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::i
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _i @-1
-                  type: int
-              returnType: void
-            synthetic get j @-1
-              reference: <testLibraryFragment>::@class::C::@getter::j
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set j= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::j
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _j @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_fields_late() async {
-    var library = await buildLibrary('''
-class C {
-  late int foo;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            late foo @21
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::C::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_fields_late_final() async {
-    var library = await buildLibrary('''
-class C {
-  late final int foo;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            late final foo @27
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::C::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_fields_late_final_initialized() async {
-    var library = await buildLibrary('''
-class C {
-  late final int foo = 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            late final foo @27
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::C::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_fields_late_inference_usingSuper_methodInvocation() async {
-    var library = await buildLibrary('''
-class A {
-  int foo() => 0;
-}
-
-class B extends A {
-  late var f = super.foo();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @16
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-        class B @37
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          fields
-            late f @62
-              reference: <testLibraryFragment>::@class::B::@field::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::B::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: int
-            synthetic set f= @-1
-              reference: <testLibraryFragment>::@class::B::@setter::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional _f @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_fields_late_inference_usingSuper_propertyAccess() async {
-    var library = await buildLibrary('''
-class A {
-  int get foo => 0;
-}
-
-class B extends A {
-  late var f = super.foo;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo @20
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-        class B @39
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          fields
-            late f @64
-              reference: <testLibraryFragment>::@class::B::@field::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::B::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: int
-            synthetic set f= @-1
-              reference: <testLibraryFragment>::@class::B::@setter::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional _f @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_final() async {
-    var library = await buildLibrary('final class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        final class C @12
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_getter_abstract() async {
-    var library = await buildLibrary('abstract class C { int get x; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class C @15
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            abstract get x @27
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_getter_external() async {
-    var library = await buildLibrary('class C { external int get x; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            external get x @27
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_getter_implicit_return_type() async {
-    var library = await buildLibrary('class C { get x => null; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            get x @14
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_class_getter_invokesSuperSelf_getter() async {
-    var library = await buildLibrary(r'''
-class A {
-  int get foo {
-    super.foo;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo @20 invokesSuperSelf
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-''');
-  }
-
-  test_class_getter_invokesSuperSelf_getter_nestedInAssignment() async {
-    var library = await buildLibrary(r'''
-class A {
-  int get foo {
-    (super.foo).foo = 0;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo @20 invokesSuperSelf
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-''');
-  }
-
-  test_class_getter_invokesSuperSelf_setter() async {
-    var library = await buildLibrary(r'''
-class A {
-  int get foo {
-    super.foo = 0;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo @20
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-''');
-  }
-
-  test_class_getter_native() async {
-    var library = await buildLibrary('''
-class C {
-  int get x() native;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            external get x @20
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_getter_static() async {
-    var library = await buildLibrary('class C { static int get x => null; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic static x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            static get x @25
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_getters() async {
-    var library =
-        await buildLibrary('class C { int get x => null; get y => null; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-            synthetic y @-1
-              reference: <testLibraryFragment>::@class::C::@field::y
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            get x @18
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            get y @33
-              reference: <testLibraryFragment>::@class::C::@getter::y
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_class_implicitField_getterFirst() async {
-    var library = await buildLibrary('''
-class C {
-  int get x => 0;
-  void set x(int value) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            get x @20
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            set x= @39
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @45
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_implicitField_setterFirst() async {
-    var library = await buildLibrary('''
-class C {
-  void set x(int value) {}
-  int get x => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            set x= @21
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @27
-                  type: int
-              returnType: void
-            get x @47
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_interface() async {
-    var library = await buildLibrary('interface class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        interface class C @16
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_interfaces() async {
-    var library = await buildLibrary('''
-class C implements D, E {}
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            D
-            E
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @33
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @44
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-''');
-  }
-
-  test_class_interfaces_extensionType() async {
-    var library = await buildLibrary('''
-class A {}
-extension type B(int it) {}
-class C {}
-class D implements A, B, C {}
-''');
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-        class C @45
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-        class D @56
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            A
-            C
-      extensionTypes
-        B @26
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: int
-          fields
-            final it @32
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: int
-''');
-  }
-
-  test_class_interfaces_Function() async {
-    var library = await buildLibrary('''
-class A {}
-class B {}
-class C implements A, Function, B {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @17
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @28
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            A
-            B
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_interfaces_unresolved() async {
-    var library = await buildLibrary(
-        'class C implements X, Y, Z {} class X {} class Z {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            X
-            Z
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class X @36
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-        class Z @47
-          reference: <testLibraryFragment>::@class::Z
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::Z::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::Z
-''');
-  }
-
-  test_class_method_abstract() async {
-    var library = await buildLibrary('abstract class C { f(); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class C @15
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            abstract f @19
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_class_method_async() async {
-    var library = await buildLibrary(r'''
-import 'dart:async';
-class C {
-  Future f() async {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @27
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @40 async
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: Future<dynamic>
-''');
-  }
-
-  test_class_method_asyncStar() async {
-    var library = await buildLibrary(r'''
-import 'dart:async';
-class C {
-  Stream f() async* {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @27
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @40 async*
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: Stream<dynamic>
-''');
-  }
-
-  test_class_method_documented() async {
-    var library = await buildLibrary('''
-class C {
-  /**
-   * Docs
-   */
-  f() {}
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @34
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /**\n   * Docs\n   */
-              returnType: dynamic
-''');
-  }
-
-  test_class_method_external() async {
-    var library = await buildLibrary('class C { external f(); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            external f @19
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_class_method_hasImplicitReturnType_false() async {
-    var library = await buildLibrary('''
-class C {
-  int m() => 0;
-}
-''');
-    var c = library.definingCompilationUnit.classes.single;
-    var m = c.methods.single;
-    expect(m.hasImplicitReturnType, isFalse);
-  }
-
-  test_class_method_hasImplicitReturnType_true() async {
-    var library = await buildLibrary('''
-class C {
-  m() => 0;
-}
-''');
-    var c = library.definingCompilationUnit.classes.single;
-    var m = c.methods.single;
-    expect(m.hasImplicitReturnType, isTrue);
-  }
-
-  test_class_method_inferred_type_nonStatic_implicit_param() async {
-    var library = await buildLibrary('class C extends D { void f(value) {} }'
-        ' abstract class D { void f(int value); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-          methods
-            f @25
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @27
-                  type: int
-              returnType: void
-        abstract class D @54
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          methods
-            abstract f @63
-              reference: <testLibraryFragment>::@class::D::@method::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              parameters
-                requiredPositional value @69
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_method_inferred_type_nonStatic_implicit_return() async {
-    var library = await buildLibrary('''
-class C extends D {
-  f() => null;
-}
-abstract class D {
-  int f();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-          methods
-            f @22
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-        abstract class D @52
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          methods
-            abstract f @62
-              reference: <testLibraryFragment>::@class::D::@method::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              returnType: int
-''');
-  }
-
-  test_class_method_invokesSuperSelf() async {
-    var library = await buildLibrary(r'''
-class A {
-  void foo() {
-    super.foo();
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @17 invokesSuperSelf
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-''');
-  }
-
-  test_class_method_namedAsSupertype() async {
-    var library = await buildLibrary(r'''
-class A {}
-class B extends A {
-  void A() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @17
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-          methods
-            A @38
-              reference: <testLibraryFragment>::@class::B::@method::A
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: void
-''');
-  }
-
-  test_class_method_native() async {
-    var library = await buildLibrary('''
-class C {
-  int m() native;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            external m @16
-              reference: <testLibraryFragment>::@class::C::@method::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_class_method_params() async {
-    var library = await buildLibrary('class C { f(x, y) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @10
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional x @12
-                  type: dynamic
-                requiredPositional y @15
-                  type: dynamic
-              returnType: dynamic
-''');
-  }
-
-  test_class_method_static() async {
-    var library = await buildLibrary('class C { static f() {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            static f @17
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_class_method_syncStar() async {
-    var library = await buildLibrary(r'''
-class C {
-  Iterable<int> f() sync* {
-    yield 42;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @26 sync*
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: Iterable<int>
-''');
-  }
-
-  test_class_method_type_parameter() async {
-    var library = await buildLibrary('class C { T f<T, U>(U u) => null; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @12
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              typeParameters
-                covariant T @14
-                  defaultType: dynamic
-                covariant U @17
-                  defaultType: dynamic
-              parameters
-                requiredPositional u @22
-                  type: U
-              returnType: T
-''');
-  }
-
-  test_class_method_type_parameter_in_generic_class() async {
-    var library = await buildLibrary('''
-class C<T, U> {
-  V f<V, W>(T t, U u, W w) => null;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @20
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              typeParameters
-                covariant V @22
-                  defaultType: dynamic
-                covariant W @25
-                  defaultType: dynamic
-              parameters
-                requiredPositional t @30
-                  type: T
-                requiredPositional u @35
-                  type: U
-                requiredPositional w @40
-                  type: W
-              returnType: V
-''');
-  }
-
-  test_class_method_type_parameter_with_function_typed_parameter() async {
-    var library = await buildLibrary('class C { void f<T, U>(T x(U u)) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @15
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              typeParameters
-                covariant T @17
-                  defaultType: dynamic
-                covariant U @20
-                  defaultType: dynamic
-              parameters
-                requiredPositional x @25
-                  type: T Function(U)
-                  parameters
-                    requiredPositional u @29
-                      type: U
-              returnType: void
-''');
-  }
-
-  test_class_methods() async {
-    var library = await buildLibrary('class C { f() {} g() {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @10
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            g @17
-              reference: <testLibraryFragment>::@class::C::@method::g
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_class_mixin_class() async {
-    var library = await buildLibrary('mixin class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        mixin class C @12
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_mixins() async {
-    var library = await buildLibrary('''
-class C extends D with E, F, G {}
-class D {}
-class E {}
-class F {}
-class G {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          mixins
-            E
-            F
-            G
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @40
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @51
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-        class F @62
-          reference: <testLibraryFragment>::@class::F
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::F::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::F
-        class G @73
-          reference: <testLibraryFragment>::@class::G
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::G::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::G
-''');
-  }
-
-  test_class_mixins_extensionType() async {
-    var library = await buildLibrary('''
-mixin A {}
-extension type B(int it) {}
-mixin C {}
-class D extends Object with A, B, C {}
-''');
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class D @56
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            A
-            C
-      extensionTypes
-        B @26
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: int
-          fields
-            final it @32
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: int
-      mixins
-        mixin A @6
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-        mixin C @45
-          reference: <testLibraryFragment>::@mixin::C
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_class_mixins_generic() async {
-    var library = await buildLibrary('''
-class Z extends A with B<int>, C<double> {}
-class A {}
-class B<B1> {}
-class C<C1> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class Z @6
-          reference: <testLibraryFragment>::@class::Z
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          mixins
-            B<int>
-            C<double>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::Z::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::Z
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-        class A @50
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @61
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant B1 @63
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @76
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant C1 @78
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_mixins_genericMixin_tooManyArguments() async {
-    var library = await buildLibrary('''
-mixin M<T> {}
-class A extends Object with M<int, String> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @20
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_class_mixins_typeParameter() async {
-    var library = await buildLibrary('''
-mixin M1 {}
-mixin M2 {}
-class A<T> extends Object with M1, T<int>, M2 {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @30
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @32
-              defaultType: dynamic
-          supertype: Object
-          mixins
-            M1
-            M2
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      mixins
-        mixin M1 @6
-          reference: <testLibraryFragment>::@mixin::M1
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-        mixin M2 @18
-          reference: <testLibraryFragment>::@mixin::M2
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_class_mixins_unresolved() async {
-    var library = await buildLibrary(
-        'class C extends Object with X, Y, Z {} class X {} class Z {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            X
-            Z
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class X @45
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-        class Z @56
-          reference: <testLibraryFragment>::@class::Z
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::Z::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::Z
-''');
-  }
-
-  test_class_notSimplyBounded_circularity_via_typeAlias_recordType() async {
-    var library = await buildLibrary('''
-class C<T extends A> {}
-typedef A = (C, int);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: dynamic
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        notSimplyBounded A @32
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: (C<dynamic>, int)
-''');
-  }
-
-  test_class_notSimplyBounded_circularity_via_typedef() async {
-    // C's type parameter T is not simply bounded because its bound, F, expands
-    // to `dynamic F(C)`, which refers to C.
-    var library = await buildLibrary('''
-class C<T extends F> {}
-typedef F(C value);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: dynamic
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        functionTypeAliasBased notSimplyBounded F @32
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function(C<dynamic>)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional value @36
-                type: C<dynamic>
-            returnType: dynamic
-''');
-  }
-
-  test_class_notSimplyBounded_circularity_with_type_params() async {
-    // C's type parameter T is simply bounded because even though it refers to
-    // C, it specifies a bound.
-    var library = await buildLibrary('''
-class C<T extends C<dynamic>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: C<dynamic>
-              defaultType: C<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_notSimplyBounded_complex_by_cycle_class() async {
-    var library = await buildLibrary('''
-class C<T extends D> {}
-class D<T extends C> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: D<dynamic>
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        notSimplyBounded class D @30
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @32
-              bound: C<dynamic>
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-''');
-  }
-
-  test_class_notSimplyBounded_complex_by_cycle_typedef_functionType() async {
-    var library = await buildLibrary('''
-typedef C<T extends D> = void Function();
-typedef D<T extends C> = void Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        notSimplyBounded C @8
-          reference: <testLibraryFragment>::@typeAlias::C
-          typeParameters
-            unrelated T @10
-              bound: dynamic
-              defaultType: dynamic
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-        notSimplyBounded D @50
-          reference: <testLibraryFragment>::@typeAlias::D
-          typeParameters
-            unrelated T @52
-              bound: dynamic
-              defaultType: dynamic
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_class_notSimplyBounded_complex_by_cycle_typedef_interfaceType() async {
-    var library = await buildLibrary('''
-typedef C<T extends D> = List<T>;
-typedef D<T extends C> = List<T>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        notSimplyBounded C @8
-          reference: <testLibraryFragment>::@typeAlias::C
-          typeParameters
-            covariant T @10
-              bound: dynamic
-              defaultType: dynamic
-          aliasedType: List<T>
-        notSimplyBounded D @42
-          reference: <testLibraryFragment>::@typeAlias::D
-          typeParameters
-            covariant T @44
-              bound: dynamic
-              defaultType: dynamic
-          aliasedType: List<T>
-''');
-  }
-
-  test_class_notSimplyBounded_complex_by_reference_to_cycle() async {
-    var library = await buildLibrary('''
-class C<T extends D> {}
-class D<T extends D> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: D<dynamic>
-              defaultType: D<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        notSimplyBounded class D @30
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @32
-              bound: D<dynamic>
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-''');
-  }
-
-  test_class_notSimplyBounded_complex_by_use_of_parameter() async {
-    var library = await buildLibrary('''
-class C<T extends D<T>> {}
-class D<T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: D<T>
-              defaultType: D<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @33
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @35
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-''');
-  }
-
-  test_class_notSimplyBounded_dependency_with_type_params() async {
-    // C's type parameter T is simply bounded because even though it refers to
-    // non-simply-bounded type D, it specifies a bound.
-    var library = await buildLibrary('''
-class C<T extends D<dynamic>> {}
-class D<T extends D<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: D<dynamic>
-              defaultType: D<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        notSimplyBounded class D @39
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @41
-              bound: D<T>
-              defaultType: D<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-''');
-  }
-
-  test_class_notSimplyBounded_function_typed_bound_complex_via_parameter_type() async {
-    var library = await buildLibrary('''
-class C<T extends void Function(T)> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: void Function(T)
-              defaultType: void Function(Never)
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_notSimplyBounded_function_typed_bound_complex_via_return_type() async {
-    var library = await buildLibrary('''
-class C<T extends T Function()> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: T Function()
-              defaultType: dynamic Function()
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_notSimplyBounded_function_typed_bound_simple() async {
-    var library = await buildLibrary('''
-class C<T extends void Function()> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: void Function()
-              defaultType: void Function()
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_notSimplyBounded_refers_to_circular_typedef() async {
-    // C's type parameter T has a bound of F, which is a circular typedef.  This
-    // is illegal in Dart, but we need to make sure it doesn't lead to a crash
-    // or infinite loop.
-    var library = await buildLibrary('''
-class C<T extends F> {}
-typedef F(G value);
-typedef G(F value);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: dynamic
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        functionTypeAliasBased notSimplyBounded F @32
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function(dynamic)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional value @36
-                type: dynamic
-            returnType: dynamic
-        functionTypeAliasBased notSimplyBounded G @52
-          reference: <testLibraryFragment>::@typeAlias::G
-          aliasedType: dynamic Function(dynamic)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional value @56
-                type: dynamic
-            returnType: dynamic
-''');
-  }
-
-  test_class_notSimplyBounded_self() async {
-    var library = await buildLibrary('''
-class C<T extends C> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: C<dynamic>
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_notSimplyBounded_simple_because_non_generic() async {
-    // If no type parameters are specified, then the class is simply bounded, so
-    // there is no reason to assign it a slot.
-    var library = await buildLibrary('''
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_notSimplyBounded_simple_by_lack_of_cycles() async {
-    var library = await buildLibrary('''
-class C<T extends D> {}
-class D<T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: D<dynamic>
-              defaultType: D<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @30
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @32
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-''');
-  }
-
-  test_class_notSimplyBounded_simple_by_syntax() async {
-    // If no bounds are specified, then the class is simply bounded by syntax
-    // alone, so there is no reason to assign it a slot.
-    var library = await buildLibrary('''
-class C<T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_operator() async {
-    var library =
-        await buildLibrary('class C { C operator+(C other) => null; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            + @20
-              reference: <testLibraryFragment>::@class::C::@method::+
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional other @24
-                  type: C
-              returnType: C
-''');
-  }
-
-  test_class_operator_equal() async {
-    var library = await buildLibrary('''
-class C {
-  bool operator==(Object other) => false;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            == @25
-              reference: <testLibraryFragment>::@class::C::@method::==
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional other @35
-                  type: Object
-              returnType: bool
-''');
-  }
-
-  test_class_operator_external() async {
-    var library =
-        await buildLibrary('class C { external C operator+(C other); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            external + @29
-              reference: <testLibraryFragment>::@class::C::@method::+
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional other @33
-                  type: C
-              returnType: C
-''');
-  }
-
-  test_class_operator_greater_equal() async {
-    var library = await buildLibrary('''
-class C {
-  bool operator>=(C other) => false;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            >= @25
-              reference: <testLibraryFragment>::@class::C::@method::>=
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional other @30
-                  type: C
-              returnType: bool
-''');
-  }
-
-  test_class_operator_index() async {
-    var library =
-        await buildLibrary('class C { bool operator[](int i) => null; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            [] @23
-              reference: <testLibraryFragment>::@class::C::@method::[]
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional i @30
-                  type: int
-              returnType: bool
-''');
-  }
-
-  test_class_operator_index_set() async {
-    var library = await buildLibrary('''
-class C {
-  void operator[]=(int i, bool v) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            []= @25
-              reference: <testLibraryFragment>::@class::C::@method::[]=
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional i @33
-                  type: int
-                requiredPositional v @41
-                  type: bool
-              returnType: void
-''');
-  }
-
-  test_class_operator_less_equal() async {
-    var library = await buildLibrary('''
-class C {
-  bool operator<=(C other) => false;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            <= @25
-              reference: <testLibraryFragment>::@class::C::@method::<=
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional other @30
-                  type: C
-              returnType: bool
-''');
-  }
-
-  test_class_ref_nullability_none() async {
-    var library = await buildLibrary('''
-class C {}
-C c;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static c @13
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-''');
-  }
-
-  test_class_ref_nullability_question() async {
-    var library = await buildLibrary('''
-class C {}
-C? c;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static c @14
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C?
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C?
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C?
-          returnType: void
-''');
-  }
-
-  test_class_sealed() async {
-    var library = await buildLibrary('sealed class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract sealed class C @13
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_sealed_induced_base_extends_base() async {
-    var library = await buildLibrary('''
-base class A {}
-sealed class B extends A {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        base class A @11
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        abstract sealed base class B @29
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_sealed_induced_base_implements_base() async {
-    var library = await buildLibrary('''
-base class A {}
-sealed class B implements A {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        base class A @11
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        abstract sealed base class B @29
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-''');
-  }
-
-  test_class_sealed_induced_base_implements_final() async {
-    var library = await buildLibrary('''
-final class A {}
-sealed class B implements A {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        final class A @12
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        abstract sealed base class B @30
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-''');
-  }
-
-  test_class_sealed_induced_final_extends_final() async {
-    var library = await buildLibrary('''
-final class A {}
-sealed class B extends A {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        final class A @12
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        abstract sealed final class B @30
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_sealed_induced_final_with_base_mixin() async {
-    var library = await buildLibrary('''
-base mixin A {}
-interface class B {}
-sealed class C extends B with A {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        interface class B @32
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        abstract sealed final class C @50
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: B
-          mixins
-            A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::B::@constructor::new
-      mixins
-        base mixin A @11
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_class_sealed_induced_interface_extends_interface() async {
-    var library = await buildLibrary('''
-interface class A {}
-sealed class B extends A {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        interface class A @16
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        abstract sealed interface class B @34
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_class_sealed_induced_none_implements_interface() async {
-    var library = await buildLibrary('''
-interface class A {}
-sealed class B implements A {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        interface class A @16
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        abstract sealed class B @34
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-''');
-  }
-
-  test_class_setter_abstract() async {
-    var library =
-        await buildLibrary('abstract class C { void set x(int value); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class C @15
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            abstract set x= @28
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @34
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_setter_covariant() async {
-    var library =
-        await buildLibrary('class C { void set x(covariant int value); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            abstract set x= @19
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional covariant value @35
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_setter_external() async {
-    var library =
-        await buildLibrary('class C { external void set x(int value); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            external set x= @28
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @34
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_setter_implicit_param_type() async {
-    var library = await buildLibrary('class C { void set x(value) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            set x= @19
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @21
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_setter_implicit_return_type() async {
-    var library = await buildLibrary('class C { set x(int value) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            set x= @14
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @20
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_setter_inferred_type_conflictingInheritance() async {
-    var library = await buildLibrary('''
-class A {
-  int t;
-}
-class B extends A {
-  double t;
-}
-class C extends A implements B {
-}
-class D extends C {
-  void set t(p) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            t @16
-              reference: <testLibraryFragment>::@class::A::@field::t
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get t @-1
-              reference: <testLibraryFragment>::@class::A::@getter::t
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-            synthetic set t= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::t
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _t @-1
-                  type: int
-              returnType: void
-        class B @27
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          fields
-            t @50
-              reference: <testLibraryFragment>::@class::B::@field::t
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: double
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-          accessors
-            synthetic get t @-1
-              reference: <testLibraryFragment>::@class::B::@getter::t
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: double
-            synthetic set t= @-1
-              reference: <testLibraryFragment>::@class::B::@setter::t
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional _t @-1
-                  type: double
-              returnType: void
-        class C @61
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          interfaces
-            B
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-        class D @96
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          supertype: C
-          fields
-            synthetic t @-1
-              reference: <testLibraryFragment>::@class::D::@field::t
-              enclosingElement: <testLibraryFragment>::@class::D
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-              superConstructor: <testLibraryFragment>::@class::C::@constructor::new
-          accessors
-            set t= @121
-              reference: <testLibraryFragment>::@class::D::@setter::t
-              enclosingElement: <testLibraryFragment>::@class::D
-              parameters
-                requiredPositional p @123
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_setter_inferred_type_nonStatic_implicit_param() async {
-    var library =
-        await buildLibrary('class C extends D { void set f(value) {} }'
-            ' abstract class D { void set f(int value); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          fields
-            synthetic f @-1
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-          accessors
-            set f= @29
-              reference: <testLibraryFragment>::@class::C::@setter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @31
-                  type: int
-              returnType: void
-        abstract class D @58
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic f @-1
-              reference: <testLibraryFragment>::@class::D::@field::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          accessors
-            abstract set f= @71
-              reference: <testLibraryFragment>::@class::D::@setter::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              parameters
-                requiredPositional value @77
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_setter_inferred_type_static_implicit_return() async {
-    var library = await buildLibrary('''
-class C {
-  static set f(int value) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic static f @-1
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            static set f= @23
-              reference: <testLibraryFragment>::@class::C::@setter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @29
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_setter_invalid_named_parameter() async {
-    var library = await buildLibrary('class C { void set x({a}) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            set x= @19
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalNamed default a @22
-                  reference: <testLibraryFragment>::@class::C::@setter::x::@parameter::a
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_setter_invalid_no_parameter() async {
-    var library = await buildLibrary('class C { void set x() {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            set x= @19
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: void
-''');
-  }
-
-  test_class_setter_invalid_optional_parameter() async {
-    var library = await buildLibrary('class C { void set x([a]) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            set x= @19
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default a @22
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_setter_invalid_too_many_parameters() async {
-    var library = await buildLibrary('class C { void set x(a, b) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            set x= @19
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional a @21
-                  type: dynamic
-                requiredPositional b @24
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_setter_invokesSuperSelf_getter() async {
-    var library = await buildLibrary(r'''
-class A {
-  set foo(int _) {
-    super.foo;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            set foo= @16
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @24
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_setter_invokesSuperSelf_setter() async {
-    var library = await buildLibrary(r'''
-class A {
-  set foo(int _) {
-    super.foo = 0;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            set foo= @16 invokesSuperSelf
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @24
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_setter_native() async {
-    var library = await buildLibrary('''
-class C {
-  void set x(int value) native;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            external set x= @21
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @27
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_setter_static() async {
-    var library =
-        await buildLibrary('class C { static void set x(int value) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic static x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            static set x= @26
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @32
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_class_setters() async {
-    var library = await buildLibrary('''
-class C {
-  void set x(int value) {}
-  set y(value) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-            synthetic y @-1
-              reference: <testLibraryFragment>::@class::C::@field::y
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            set x= @21
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @27
-                  type: int
-              returnType: void
-            set y= @43
-              reference: <testLibraryFragment>::@class::C::@setter::y
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @45
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_class_supertype() async {
-    var library = await buildLibrary('''
-class A {}
-class B extends A {}
-''');
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-        class B @17
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-''');
-  }
-
-  test_class_supertype_dynamic() async {
-    var library = await buildLibrary('''
-class A extends dynamic {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_class_supertype_extensionType() async {
-    var library = await buildLibrary('''
-extension type A(int it) {}
-class B extends A {}
-''');
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @34
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_class_supertype_genericClass() async {
-    var library = await buildLibrary('''
-class C extends D<int, double> {}
-class D<T1, T2> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D<int, double>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::D::@constructor::new
-                substitution: {T1: int, T2: double}
-        class D @40
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @42
-              defaultType: dynamic
-            covariant T2 @46
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-''');
-  }
-
-  test_class_supertype_genericClass_tooManyArguments() async {
-    var library = await buildLibrary('''
-class A<T> {}
-class B extends A<int, String> {}
-''');
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-        class B @20
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A<dynamic>
-''');
-  }
-
-  test_class_supertype_typeArguments_self() async {
-    var library = await buildLibrary('''
-class A<T> {}
-class B extends A<B> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @20
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A<B>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: B}
-''');
-  }
-
-  test_class_supertype_typeParameter() async {
-    var library = await buildLibrary('''
-class A<T> extends T<int> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_class_supertype_unresolved() async {
-    var library = await buildLibrary('class C extends D {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_typeParameters() async {
-    var library = await buildLibrary('class C<T, U> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_typeParameters_bound() async {
-    var library = await buildLibrary('''
-class C<T extends Object, U extends D> {}
-class D {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: Object
-              defaultType: Object
-            covariant U @26
-              bound: D
-              defaultType: D
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @48
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-''');
-  }
-
-  test_class_typeParameters_cycle_1of1() async {
-    var library = await buildLibrary('class C<T extends T> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: dynamic
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_typeParameters_cycle_2of3() async {
-    var library = await buildLibrary(r'''
-class C<T extends V, U, V extends T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: dynamic
-              defaultType: dynamic
-            covariant U @21
-              defaultType: dynamic
-            covariant V @24
-              bound: dynamic
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_typeParameters_defaultType_cycle_genericFunctionType() async {
-    var library = await buildLibrary(r'''
-class A<T extends void Function(A)> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: void Function(A<dynamic>)
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_class_typeParameters_defaultType_cycle_genericFunctionType2() async {
-    var library = await buildLibrary(r'''
-class C<T extends void Function<U extends C>()> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: void Function<U extends C<dynamic>>()
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_typeParameters_defaultType_functionTypeAlias_contravariant() async {
-    var library = await buildLibrary(r'''
-typedef F<X> = void Function(X);
-
-class A<X extends F<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class A @40
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @42
-              bound: void Function(X)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    X
-              defaultType: void Function(Never)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    Never
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          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() async {
-    var library = await buildLibrary(r'''
-typedef F<X> = X Function();
-
-class A<X extends F<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class A @36
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @38
-              bound: X Function()
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    X
-              defaultType: dynamic Function()
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            covariant X @10
-              defaultType: dynamic
-          aliasedType: X Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: X
-''');
-  }
-
-  test_class_typeParameters_defaultType_functionTypeAlias_invariant() async {
-    var library = await buildLibrary(r'''
-typedef F<X> = X Function(X);
-
-class A<X extends F<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class A @37
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @39
-              bound: X Function(X)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    X
-              defaultType: dynamic Function(dynamic)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          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_legacy() async {
-    var library = await buildLibrary(r'''
-typedef F<X> = X Function(X);
-
-class A<X extends F<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class A @37
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @39
-              bound: X Function(X)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    X
-              defaultType: dynamic Function(dynamic)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          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() async {
-    var library = await buildLibrary(r'''
-class A<X extends X Function(X)> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @8
-              bound: X Function(X)
-              defaultType: dynamic Function(Never)
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_class_typeParameters_defaultType_genericFunctionType_contravariant() async {
-    var library = await buildLibrary(r'''
-class A<X extends void Function(X)> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @8
-              bound: void Function(X)
-              defaultType: void Function(Never)
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_class_typeParameters_defaultType_genericFunctionType_covariant() async {
-    var library = await buildLibrary(r'''
-class A<X extends X Function()> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @8
-              bound: X Function()
-              defaultType: dynamic Function()
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_class_typeParameters_defaultType_genericFunctionType_covariant_legacy() async {
-    var library = await buildLibrary(r'''
-class A<X extends X Function()> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @8
-              bound: X Function()
-              defaultType: dynamic Function()
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_class_typeParameters_defaultType_typeAlias_interface_contravariant() async {
-    var library = await buildLibrary(r'''
-typedef A<X> = List<void Function(X)>;
-
-class B<X extends A<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class B @46
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @48
-              bound: List<void Function(X)>
-                alias: <testLibraryFragment>::@typeAlias::A
-                  typeArguments
-                    X
-              defaultType: List<void Function(Never)>
-                alias: <testLibraryFragment>::@typeAlias::A
-                  typeArguments
-                    Never
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            contravariant X @10
-              defaultType: dynamic
-          aliasedType: List<void Function(X)>
-''');
-  }
-
-  test_class_typeParameters_defaultType_typeAlias_interface_covariant() async {
-    var library = await buildLibrary(r'''
-typedef A<X> = Map<X, int>;
-
-class B<X extends A<X>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class B @35
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @37
-              bound: Map<X, int>
-                alias: <testLibraryFragment>::@typeAlias::A
-                  typeArguments
-                    X
-              defaultType: Map<dynamic, int>
-                alias: <testLibraryFragment>::@typeAlias::A
-                  typeArguments
-                    dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            covariant X @10
-              defaultType: dynamic
-          aliasedType: Map<X, int>
-''');
-  }
-
-  test_class_typeParameters_f_bound_complex() async {
-    var library = await buildLibrary('class C<T extends List<U>, U> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: List<U>
-              defaultType: List<dynamic>
-            covariant U @27
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_typeParameters_f_bound_simple() async {
-    var library = await buildLibrary('class C<T extends U, U> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: U
-              defaultType: dynamic
-            covariant U @21
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_typeParameters_variance_contravariant() async {
-    var library = await buildLibrary('class C<in T> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            contravariant T @11
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_typeParameters_variance_covariant() async {
-    var library = await buildLibrary('class C<out T> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @12
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_typeParameters_variance_invariant() async {
-    var library = await buildLibrary('class C<inout T> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            invariant T @14
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_class_typeParameters_variance_multiple() async {
-    var library = await buildLibrary('class C<inout T, in U, out V> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            invariant T @14
-              defaultType: dynamic
-            contravariant U @20
-              defaultType: dynamic
-            covariant V @27
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_classAlias() async {
-    var library = await buildLibrary('''
-class C = D with E, F, G;
-class D {}
-class E {}
-class F {}
-class G {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          mixins
-            E
-            F
-            G
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @32
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @43
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-        class F @54
-          reference: <testLibraryFragment>::@class::F
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::F::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::F
-        class G @65
-          reference: <testLibraryFragment>::@class::G
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::G::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::G
-''');
-  }
-
-  test_classAlias_abstract() async {
-    var library = await buildLibrary('''
-abstract class C = D with E;
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class alias C @15
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          mixins
-            E
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @35
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @46
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-''');
-  }
-
-  test_classAlias_base() async {
-    var library = await buildLibrary('''
-base class C = Object with M;
-mixin M {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        base class alias C @11
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-      mixins
-        mixin M @36
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_classAlias_constructors_default() async {
-    var library = await buildLibrary('''
-class A {}
-mixin class M {}
-class X = A with M;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        mixin class M @23
-          reference: <testLibraryFragment>::@class::M
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::M::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::M
-        class alias X @34
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          mixins
-            M
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_classAlias_constructors_dependencies() async {
-    var library = await buildLibrary('''
-class A {
-  A(int i);
-}
-mixin class M1 {}
-mixin class M2 {}
-
-class C2 = C1 with M2;
-class C1 = A with M1;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional i @18
-                  type: int
-        mixin class M1 @36
-          reference: <testLibraryFragment>::@class::M1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::M1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::M1
-        mixin class M2 @54
-          reference: <testLibraryFragment>::@class::M2
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::M2::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::M2
-        class alias C2 @67
-          reference: <testLibraryFragment>::@class::C2
-          enclosingElement: <testLibraryFragment>
-          supertype: C1
-          mixins
-            M2
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C2::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C2
-              parameters
-                requiredPositional i @-1
-                  type: int
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: i @-1
-                        staticElement: <testLibraryFragment>::@class::C2::@constructor::new::@parameter::i
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::C1::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::C1::@constructor::new
-        class alias C1 @90
-          reference: <testLibraryFragment>::@class::C1
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          mixins
-            M1
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C1
-              parameters
-                requiredPositional i @-1
-                  type: int
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: i @-1
-                        staticElement: <testLibraryFragment>::@class::C1::@constructor::new::@parameter::i
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_classAlias_constructors_optionalParameters() async {
-    var library = await buildLibrary('''
-class A {
-  A.c1(int a);
-  A.c2(int a, [int? b, int c = 0]);
-  A.c3(int a, {int? b, int c = 0});
-}
-
-mixin M {}
-
-class C = A with M;
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            c1 @14
-              reference: <testLibraryFragment>::@class::A::@constructor::c1
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 13
-              nameEnd: 16
-              parameters
-                requiredPositional a @21
-                  type: int
-            c2 @29
-              reference: <testLibraryFragment>::@class::A::@constructor::c2
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 28
-              nameEnd: 31
-              parameters
-                requiredPositional a @36
-                  type: int
-                optionalPositional default b @45
-                  type: int?
-                optionalPositional default c @52
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 0 @56
-                      staticType: int
-            c3 @65
-              reference: <testLibraryFragment>::@class::A::@constructor::c3
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 64
-              nameEnd: 67
-              parameters
-                requiredPositional a @72
-                  type: int
-                optionalNamed default b @81
-                  reference: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::b
-                  type: int?
-                optionalNamed default c @88
-                  reference: <testLibraryFragment>::@class::A::@constructor::c3::@parameter::c
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 0 @92
-                      staticType: int
-        class alias C @118
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          mixins
-            M
-          constructors
-            synthetic c1 @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::c1
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional a @-1
-                  type: int
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: c1 @-1
-                    staticElement: <testLibraryFragment>::@class::A::@constructor::c1
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: a @-1
-                        staticElement: <testLibraryFragment>::@class::C::@constructor::c1::@parameter::a
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::c1
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::c1
-            synthetic c2 @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::c2
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional a @-1
-                  type: int
-                optionalPositional default b @-1
-                  type: int?
-                optionalPositional default c @-1
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 0 @56
-                      staticType: int
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: c2 @-1
-                    staticElement: <testLibraryFragment>::@class::A::@constructor::c2
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: a @-1
-                        staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::a
-                        staticType: int
-                      SimpleIdentifier
-                        token: b @-1
-                        staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::b
-                        staticType: int?
-                      SimpleIdentifier
-                        token: c @-1
-                        staticElement: <testLibraryFragment>::@class::C::@constructor::c2::@parameter::c
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::c2
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::c2
-            synthetic c3 @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::c3
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional a @-1
-                  type: int
-                optionalNamed default b @-1
-                  reference: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b
-                  type: int?
-                optionalNamed default c @-1
-                  reference: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 0 @92
-                      staticType: int
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: c3 @-1
-                    staticElement: <testLibraryFragment>::@class::A::@constructor::c3
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: a @-1
-                        staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::a
-                        staticType: int
-                      SimpleIdentifier
-                        token: b @-1
-                        staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::b
-                        staticType: int?
-                      SimpleIdentifier
-                        token: c @-1
-                        staticElement: <testLibraryFragment>::@class::C::@constructor::c3::@parameter::c
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::c3
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::c3
-      mixins
-        mixin M @106
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_classAlias_constructors_requiredParameters() async {
-    var library = await buildLibrary('''
-class A<T extends num> {
-  A(T x, T y);
-}
-
-mixin M {}
-
-class B<E extends num> = A<E> with M;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: num
-              defaultType: num
-          constructors
-            @27
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional x @31
-                  type: T
-                requiredPositional y @36
-                  type: T
-        class alias B @61
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant E @63
-              bound: num
-              defaultType: num
-          supertype: A<E>
-          mixins
-            M
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional x @-1
-                  type: E
-                requiredPositional y @-1
-                  type: E
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: x @-1
-                        staticElement: <testLibraryFragment>::@class::B::@constructor::new::@parameter::x
-                        staticType: E
-                      SimpleIdentifier
-                        token: y @-1
-                        staticElement: <testLibraryFragment>::@class::B::@constructor::new::@parameter::y
-                        staticType: E
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: E}
-      mixins
-        mixin M @49
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_classAlias_documented() async {
-    var library = await buildLibrary('''
-/**
- * Docs
- */
-class C = D with E;
-
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * Docs\n */
-          supertype: D
-          mixins
-            E
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @43
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @54
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-''');
-  }
-
-  test_classAlias_documented_tripleSlash() async {
-    var library = await buildLibrary('''
-/// aaa
-/// b
-/// cc
-class C = D with E;
-
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias C @27
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// aaa\n/// b\n/// cc
-          supertype: D
-          mixins
-            E
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @48
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @59
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-''');
-  }
-
-  test_classAlias_documented_withLeadingNonDocumentation() async {
-    var library = await buildLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-class C = D with E;
-
-class D {}
-class E {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias C @66
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * Docs\n */
-          supertype: D
-          mixins
-            E
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @87
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @98
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-''');
-  }
-
-  test_classAlias_final() async {
-    var library = await buildLibrary('''
-final class C = Object with M;
-mixin M {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        final class alias C @12
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-      mixins
-        mixin M @37
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_classAlias_generic() async {
-    var library = await buildLibrary('''
-class Z = A with B<int>, C<double>;
-class A {}
-class B<B1> {}
-class C<C1> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias Z @6
-          reference: <testLibraryFragment>::@class::Z
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          mixins
-            B<int>
-            C<double>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::Z::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::Z
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-        class A @42
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @53
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant B1 @55
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @68
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant C1 @70
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_classAlias_interface() async {
-    var library = await buildLibrary('''
-interface class C = Object with M;
-mixin M {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        interface class alias C @16
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-      mixins
-        mixin M @41
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_classAlias_invalid_extendsEnum() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-enum E { v }
-mixin M {}
-''');
-
-    var library = await buildLibrary('''
-import 'a.dart';
-class A = E with M;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class alias A @23
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-''');
-  }
-
-  test_classAlias_invalid_extendsMixin() async {
-    var library = await buildLibrary('''
-mixin M1 {}
-mixin M2 {}
-class A = M1 with M2;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias A @30
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M2
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-      mixins
-        mixin M1 @6
-          reference: <testLibraryFragment>::@mixin::M1
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-        mixin M2 @18
-          reference: <testLibraryFragment>::@mixin::M2
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_classAlias_mixin_class() async {
-    var library = await buildLibrary('''
-mixin class C = Object with M;
-mixin M {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        mixin class alias C @12
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-      mixins
-        mixin M @37
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_classAlias_notSimplyBounded_self() async {
-    var library = await buildLibrary('''
-class C<T extends C> = D with E;
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class alias C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: C<dynamic>
-              defaultType: dynamic
-          supertype: D
-          mixins
-            E
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @39
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @50
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-''');
-  }
-
-  test_classAlias_notSimplyBounded_simple_no_type_parameter_bound() async {
-    // If no bounds are specified, then the class is simply bounded by syntax
-    // alone, so there is no reason to assign it a slot.
-    var library = await buildLibrary('''
-class C<T> = D with E;
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          supertype: D
-          mixins
-            E
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @29
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @40
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-''');
-  }
-
-  test_classAlias_notSimplyBounded_simple_non_generic() async {
-    // If no type parameters are specified, then the class is simply bounded, so
-    // there is no reason to assign it a slot.
-    var library = await buildLibrary('''
-class C = D with E;
-class D {}
-class E {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          mixins
-            E
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @26
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @37
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-''');
-  }
-
-  test_classAlias_sealed() async {
-    var library = await buildLibrary('''
-sealed class C = Object with M;
-mixin M {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract sealed class alias C @13
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-      mixins
-        mixin M @38
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_classAlias_with_const_constructors() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class Base {
-  const Base._priv();
-  const Base();
-  const Base.named();
-}
-''');
-    var library = await buildLibrary('''
-import "a.dart";
-class M {}
-class MixinApp = Base with M;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class M @23
-          reference: <testLibraryFragment>::@class::M
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::M::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::M
-        class alias MixinApp @34
-          reference: <testLibraryFragment>::@class::MixinApp
-          enclosingElement: <testLibraryFragment>
-          supertype: Base
-          mixins
-            M
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::MixinApp::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::MixinApp
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::new
-              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::new
-            synthetic const named @-1
-              reference: <testLibraryFragment>::@class::MixinApp::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::MixinApp
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: named @-1
-                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::named
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::named
-              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::named
-''');
-  }
-
-  test_classAlias_with_forwarding_constructors() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class Base {
-  bool x = true;
-  Base._priv();
-  Base();
-  Base.noArgs();
-  Base.requiredArg(x);
-  Base.positionalArg([bool x = true]);
-  Base.positionalArg2([this.x = true]);
-  Base.namedArg({int x = 42});
-  Base.namedArg2({this.x = true});
-  factory Base.fact() => Base();
-  factory Base.fact2() = Base.noArgs;
-}
-''');
-    var library = await buildLibrary('''
-import "a.dart";
-class M {}
-class MixinApp = Base with M;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class M @23
-          reference: <testLibraryFragment>::@class::M
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::M::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::M
-        class alias MixinApp @34
-          reference: <testLibraryFragment>::@class::MixinApp
-          enclosingElement: <testLibraryFragment>
-          supertype: Base
-          mixins
-            M
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::MixinApp::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::MixinApp
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::new
-              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::new
-            synthetic noArgs @-1
-              reference: <testLibraryFragment>::@class::MixinApp::@constructor::noArgs
-              enclosingElement: <testLibraryFragment>::@class::MixinApp
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: noArgs @-1
-                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
-              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::noArgs
-            synthetic requiredArg @-1
-              reference: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg
-              enclosingElement: <testLibraryFragment>::@class::MixinApp
-              parameters
-                requiredPositional x @-1
-                  type: dynamic
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: requiredArg @-1
-                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: x @-1
-                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::requiredArg::@parameter::x
-                        staticType: dynamic
-                    rightParenthesis: ) @0
-                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
-              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::requiredArg
-            synthetic positionalArg @-1
-              reference: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg
-              enclosingElement: <testLibraryFragment>::@class::MixinApp
-              parameters
-                optionalPositional default x @-1
-                  type: bool
-                  constantInitializer
-                    BooleanLiteral
-                      literal: true @127
-                      staticType: bool
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: positionalArg @-1
-                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: x @-1
-                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg::@parameter::x
-                        staticType: bool
-                    rightParenthesis: ) @0
-                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
-              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg
-            synthetic positionalArg2 @-1
-              reference: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2
-              enclosingElement: <testLibraryFragment>::@class::MixinApp
-              parameters
-                optionalPositional default final x @-1
-                  type: bool
-                  constantInitializer
-                    BooleanLiteral
-                      literal: true @167
-                      staticType: bool
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: positionalArg2 @-1
-                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: x @-1
-                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::positionalArg2::@parameter::x
-                        staticType: bool
-                    rightParenthesis: ) @0
-                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
-              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::positionalArg2
-            synthetic namedArg @-1
-              reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg
-              enclosingElement: <testLibraryFragment>::@class::MixinApp
-              parameters
-                optionalNamed default x @-1
-                  reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 42 @200
-                      staticType: int
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: namedArg @-1
-                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: x @-1
-                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg::@parameter::x
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
-              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg
-            synthetic namedArg2 @-1
-              reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2
-              enclosingElement: <testLibraryFragment>::@class::MixinApp
-              parameters
-                optionalNamed default final x @-1
-                  reference: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x
-                  type: bool
-                  constantInitializer
-                    BooleanLiteral
-                      literal: true @233
-                      staticType: bool
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: namedArg2 @-1
-                    staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: x @-1
-                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::namedArg2::@parameter::x
-                        staticType: bool
-                    rightParenthesis: ) @0
-                  staticElement: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
-              superConstructor: package:test/a.dart::<fragment>::@class::Base::@constructor::namedArg2
-''');
-  }
-
-  test_classAlias_with_forwarding_constructors_type_substitution() async {
-    var library = await buildLibrary('''
-class Base<T> {
-  Base.ctor(T t, List<T> l);
-}
-class M {}
-class MixinApp = Base with M;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class Base @6
-          reference: <testLibraryFragment>::@class::Base
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @11
-              defaultType: dynamic
-          constructors
-            ctor @23
-              reference: <testLibraryFragment>::@class::Base::@constructor::ctor
-              enclosingElement: <testLibraryFragment>::@class::Base
-              periodOffset: 22
-              nameEnd: 27
-              parameters
-                requiredPositional t @30
-                  type: T
-                requiredPositional l @41
-                  type: List<T>
-        class M @53
-          reference: <testLibraryFragment>::@class::M
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::M::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::M
-        class alias MixinApp @64
-          reference: <testLibraryFragment>::@class::MixinApp
-          enclosingElement: <testLibraryFragment>
-          supertype: Base<dynamic>
-          mixins
-            M
-          constructors
-            synthetic ctor @-1
-              reference: <testLibraryFragment>::@class::MixinApp::@constructor::ctor
-              enclosingElement: <testLibraryFragment>::@class::MixinApp
-              parameters
-                requiredPositional t @-1
-                  type: dynamic
-                requiredPositional l @-1
-                  type: List<dynamic>
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: ctor @-1
-                    staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: t @-1
-                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t
-                        staticType: dynamic
-                      SimpleIdentifier
-                        token: l @-1
-                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l
-                        staticType: List<dynamic>
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::Base::@constructor::ctor
-                substitution: {T: dynamic}
-''');
-  }
-
-  test_classAlias_with_forwarding_constructors_type_substitution_complex() async {
-    var library = await buildLibrary('''
-class Base<T> {
-  Base.ctor(T t, List<T> l);
-}
-class M {}
-class MixinApp<U> = Base<List<U>> with M;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class Base @6
-          reference: <testLibraryFragment>::@class::Base
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @11
-              defaultType: dynamic
-          constructors
-            ctor @23
-              reference: <testLibraryFragment>::@class::Base::@constructor::ctor
-              enclosingElement: <testLibraryFragment>::@class::Base
-              periodOffset: 22
-              nameEnd: 27
-              parameters
-                requiredPositional t @30
-                  type: T
-                requiredPositional l @41
-                  type: List<T>
-        class M @53
-          reference: <testLibraryFragment>::@class::M
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::M::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::M
-        class alias MixinApp @64
-          reference: <testLibraryFragment>::@class::MixinApp
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U @73
-              defaultType: dynamic
-          supertype: Base<List<U>>
-          mixins
-            M
-          constructors
-            synthetic ctor @-1
-              reference: <testLibraryFragment>::@class::MixinApp::@constructor::ctor
-              enclosingElement: <testLibraryFragment>::@class::MixinApp
-              parameters
-                requiredPositional t @-1
-                  type: List<U>
-                requiredPositional l @-1
-                  type: List<List<U>>
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: ctor @-1
-                    staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: t @-1
-                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::t
-                        staticType: List<U>
-                      SimpleIdentifier
-                        token: l @-1
-                        staticElement: <testLibraryFragment>::@class::MixinApp::@constructor::ctor::@parameter::l
-                        staticType: List<List<U>>
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::Base::@constructor::ctor
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::Base::@constructor::ctor
-                substitution: {T: List<U>}
-''');
-  }
-
-  test_classAlias_with_mixin_members() async {
-    var library = await buildLibrary('''
-class C = D with E;
-class D {}
-class E {
-  int get a => null;
-  void set b(int i) {}
-  void f() {}
-  int x;
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          mixins
-            E
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @26
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @37
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @105
-              reference: <testLibraryFragment>::@class::E::@field::x
-              enclosingElement: <testLibraryFragment>::@class::E
-              type: int
-            synthetic a @-1
-              reference: <testLibraryFragment>::@class::E::@field::a
-              enclosingElement: <testLibraryFragment>::@class::E
-              type: int
-            synthetic b @-1
-              reference: <testLibraryFragment>::@class::E::@field::b
-              enclosingElement: <testLibraryFragment>::@class::E
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::E::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::E
-              returnType: int
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::E::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::E
-              parameters
-                requiredPositional _x @-1
-                  type: int
-              returnType: void
-            get a @51
-              reference: <testLibraryFragment>::@class::E::@getter::a
-              enclosingElement: <testLibraryFragment>::@class::E
-              returnType: int
-            set b= @73
-              reference: <testLibraryFragment>::@class::E::@setter::b
-              enclosingElement: <testLibraryFragment>::@class::E
-              parameters
-                requiredPositional i @79
-                  type: int
-              returnType: void
-          methods
-            f @92
-              reference: <testLibraryFragment>::@class::E::@method::f
-              enclosingElement: <testLibraryFragment>::@class::E
-              returnType: void
-''');
-  }
-
-  test_classes() async {
-    var library = await buildLibrary('class C {} class D {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @17
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-''');
-  }
-
-  test_closure_executable_with_return_type_from_closure() async {
-    var library = await buildLibrary('''
-f() {
-  print(() {});
-  print(() => () => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_closure_generic() async {
-    var library = await buildLibrary(r'''
-final f = <U, V>(U x, V y) => y;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final f @6
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: V Function<U, V>(U, V)
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: V Function<U, V>(U, V)
-''');
-  }
-
-  test_closure_in_variable_declaration_in_part() async {
-    addSource('$testPackageLibPath/a.dart',
-        'part of lib; final f = (int i) => i.toDouble();');
-    var library = await buildLibrary('''
-library lib;
-part "a.dart";
-''');
-    checkElementText(library, r'''
-library
-  name: lib
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static final f @19
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::f
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: double Function(int)
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get f @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::f
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: double Function(int)
-''');
-  }
-
-  test_codeRange_class() async {
-    var library = await buildLibrary('''
-class Raw {}
-
-/// Comment 1.
-/// Comment 2.
-class HasDocComment {}
-
-@Object()
-class HasAnnotation {}
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-class AnnotationThenComment {}
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-class CommentThenAnnotation {}
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-class CommentAroundAnnotation {}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class Raw @6
-          reference: <testLibraryFragment>::@class::Raw
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 12
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::Raw::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::Raw
-        class HasDocComment @50
-          reference: <testLibraryFragment>::@class::HasDocComment
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          codeOffset: 14
-          codeLength: 52
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::HasDocComment::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::HasDocComment
-        class HasAnnotation @84
-          reference: <testLibraryFragment>::@class::HasAnnotation
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @68
-              name: SimpleIdentifier
-                token: Object @69
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @75
-                rightParenthesis: ) @76
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 68
-          codeLength: 32
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::HasAnnotation::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::HasAnnotation
-        class AnnotationThenComment @148
-          reference: <testLibraryFragment>::@class::AnnotationThenComment
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @102
-              name: SimpleIdentifier
-                token: Object @103
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @109
-                rightParenthesis: ) @110
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 102
-          codeLength: 70
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::AnnotationThenComment::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::AnnotationThenComment
-        class CommentThenAnnotation @220
-          reference: <testLibraryFragment>::@class::CommentThenAnnotation
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @204
-              name: SimpleIdentifier
-                token: Object @205
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @211
-                rightParenthesis: ) @212
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 174
-          codeLength: 70
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::CommentThenAnnotation::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::CommentThenAnnotation
-        class CommentAroundAnnotation @292
-          reference: <testLibraryFragment>::@class::CommentAroundAnnotation
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @261
-              name: SimpleIdentifier
-                token: Object @262
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @268
-                rightParenthesis: ) @269
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 261
-          codeLength: 57
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::CommentAroundAnnotation::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::CommentAroundAnnotation
-''');
-  }
-
-  test_codeRange_class_namedMixin() async {
-    var library = await buildLibrary('''
-class A {}
-
-class B {}
-
-class Raw = Object with A, B;
-
-/// Comment 1.
-/// Comment 2.
-class HasDocComment = Object with A, B;
-
-@Object()
-class HasAnnotation = Object with A, B;
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-class AnnotationThenComment = Object with A, B;
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-class CommentThenAnnotation = Object with A, B;
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-class CommentAroundAnnotation = Object with A, B;
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 10
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @18
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 12
-          codeLength: 10
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class alias Raw @30
-          reference: <testLibraryFragment>::@class::Raw
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 24
-          codeLength: 29
-          supertype: Object
-          mixins
-            A
-            B
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::Raw::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::Raw
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-        class alias HasDocComment @91
-          reference: <testLibraryFragment>::@class::HasDocComment
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          codeOffset: 55
-          codeLength: 69
-          supertype: Object
-          mixins
-            A
-            B
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::HasDocComment::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::HasDocComment
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-        class alias HasAnnotation @142
-          reference: <testLibraryFragment>::@class::HasAnnotation
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @126
-              name: SimpleIdentifier
-                token: Object @127
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @133
-                rightParenthesis: ) @134
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 126
-          codeLength: 49
-          supertype: Object
-          mixins
-            A
-            B
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::HasAnnotation::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::HasAnnotation
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-        class alias AnnotationThenComment @223
-          reference: <testLibraryFragment>::@class::AnnotationThenComment
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @177
-              name: SimpleIdentifier
-                token: Object @178
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @184
-                rightParenthesis: ) @185
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 177
-          codeLength: 87
-          supertype: Object
-          mixins
-            A
-            B
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::AnnotationThenComment::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::AnnotationThenComment
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-        class alias CommentThenAnnotation @312
-          reference: <testLibraryFragment>::@class::CommentThenAnnotation
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @296
-              name: SimpleIdentifier
-                token: Object @297
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @303
-                rightParenthesis: ) @304
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 266
-          codeLength: 87
-          supertype: Object
-          mixins
-            A
-            B
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::CommentThenAnnotation::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::CommentThenAnnotation
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-        class alias CommentAroundAnnotation @401
-          reference: <testLibraryFragment>::@class::CommentAroundAnnotation
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @370
-              name: SimpleIdentifier
-                token: Object @371
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @377
-                rightParenthesis: ) @378
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 370
-          codeLength: 74
-          supertype: Object
-          mixins
-            A
-            B
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::CommentAroundAnnotation::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::CommentAroundAnnotation
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-''');
-  }
-
-  test_codeRange_constructor() async {
-    var library = await buildLibrary('''
-class C {
-  C();
-
-  C.raw() {}
-
-  /// Comment 1.
-  /// Comment 2.
-  C.hasDocComment() {}
-
-  @Object()
-  C.hasAnnotation() {}
-
-  @Object()
-  /// Comment 1.
-  /// Comment 2.
-  C.annotationThenComment() {}
-
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  C.commentThenAnnotation() {}
-
-  /// Comment 1.
-  @Object()
-  /// Comment 2.
-  C.commentAroundAnnotation() {}
-}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 362
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              codeOffset: 12
-              codeLength: 4
-            raw @22
-              reference: <testLibraryFragment>::@class::C::@constructor::raw
-              enclosingElement: <testLibraryFragment>::@class::C
-              codeOffset: 20
-              codeLength: 10
-              periodOffset: 21
-              nameEnd: 25
-            hasDocComment @70
-              reference: <testLibraryFragment>::@class::C::@constructor::hasDocComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              codeOffset: 34
-              codeLength: 54
-              periodOffset: 69
-              nameEnd: 83
-            hasAnnotation @106
-              reference: <testLibraryFragment>::@class::C::@constructor::hasAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @92
-                  name: SimpleIdentifier
-                    token: Object @93
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @99
-                    rightParenthesis: ) @100
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 92
-              codeLength: 32
-              periodOffset: 105
-              nameEnd: 119
-            annotationThenComment @176
-              reference: <testLibraryFragment>::@class::C::@constructor::annotationThenComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @128
-                  name: SimpleIdentifier
-                    token: Object @129
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @135
-                    rightParenthesis: ) @136
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 128
-              codeLength: 74
-              periodOffset: 175
-              nameEnd: 197
-            commentThenAnnotation @254
-              reference: <testLibraryFragment>::@class::C::@constructor::commentThenAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @240
-                  name: SimpleIdentifier
-                    token: Object @241
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @247
-                    rightParenthesis: ) @248
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 206
-              codeLength: 74
-              periodOffset: 253
-              nameEnd: 275
-            commentAroundAnnotation @332
-              reference: <testLibraryFragment>::@class::C::@constructor::commentAroundAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @301
-                  name: SimpleIdentifier
-                    token: Object @302
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @308
-                    rightParenthesis: ) @309
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 301
-              codeLength: 59
-              periodOffset: 331
-              nameEnd: 355
-''');
-  }
-
-  test_codeRange_constructor_factory() async {
-    var library = await buildLibrary('''
-class C {
-  factory C() => throw 0;
-
-  factory C.raw() => throw 0;
-
-  /// Comment 1.
-  /// Comment 2.
-  factory C.hasDocComment() => throw 0;
-
-  @Object()
-  factory C.hasAnnotation() => throw 0;
-
-  @Object()
-  /// Comment 1.
-  /// Comment 2.
-  factory C.annotationThenComment() => throw 0;
-
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  factory C.commentThenAnnotation() => throw 0;
-
-  /// Comment 1.
-  @Object()
-  /// Comment 2.
-  factory C.commentAroundAnnotation() => throw 0;
-}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 483
-          constructors
-            factory @20
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              codeOffset: 12
-              codeLength: 23
-            factory raw @49
-              reference: <testLibraryFragment>::@class::C::@constructor::raw
-              enclosingElement: <testLibraryFragment>::@class::C
-              codeOffset: 39
-              codeLength: 27
-              periodOffset: 48
-              nameEnd: 52
-            factory hasDocComment @114
-              reference: <testLibraryFragment>::@class::C::@constructor::hasDocComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              codeOffset: 70
-              codeLength: 71
-              periodOffset: 113
-              nameEnd: 127
-            factory hasAnnotation @167
-              reference: <testLibraryFragment>::@class::C::@constructor::hasAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @145
-                  name: SimpleIdentifier
-                    token: Object @146
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @152
-                    rightParenthesis: ) @153
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 145
-              codeLength: 49
-              periodOffset: 166
-              nameEnd: 180
-            factory annotationThenComment @254
-              reference: <testLibraryFragment>::@class::C::@constructor::annotationThenComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @198
-                  name: SimpleIdentifier
-                    token: Object @199
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @205
-                    rightParenthesis: ) @206
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 198
-              codeLength: 91
-              periodOffset: 253
-              nameEnd: 275
-            factory commentThenAnnotation @349
-              reference: <testLibraryFragment>::@class::C::@constructor::commentThenAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @327
-                  name: SimpleIdentifier
-                    token: Object @328
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @334
-                    rightParenthesis: ) @335
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 293
-              codeLength: 91
-              periodOffset: 348
-              nameEnd: 370
-            factory commentAroundAnnotation @444
-              reference: <testLibraryFragment>::@class::C::@constructor::commentAroundAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @405
-                  name: SimpleIdentifier
-                    token: Object @406
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @412
-                    rightParenthesis: ) @413
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 405
-              codeLength: 76
-              periodOffset: 443
-              nameEnd: 467
-''');
-  }
-
-  test_codeRange_enum() async {
-    var library = await buildLibrary('''
-enum E {
-  aaa, bbb, ccc
-}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 26
-          supertype: Enum
-          fields
-            static const enumConstant aaa @11
-              reference: <testLibraryFragment>::@enum::E::@field::aaa
-              enclosingElement: <testLibraryFragment>::@enum::E
-              codeOffset: 11
-              codeLength: 3
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant bbb @16
-              reference: <testLibraryFragment>::@enum::E::@field::bbb
-              enclosingElement: <testLibraryFragment>::@enum::E
-              codeOffset: 16
-              codeLength: 3
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant ccc @21
-              reference: <testLibraryFragment>::@enum::E::@field::ccc
-              enclosingElement: <testLibraryFragment>::@enum::E
-              codeOffset: 21
-              codeLength: 3
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: aaa @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::aaa
-                      staticType: E
-                    SimpleIdentifier
-                      token: bbb @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::bbb
-                      staticType: E
-                    SimpleIdentifier
-                      token: ccc @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::ccc
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get aaa @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::aaa
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get bbb @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::bbb
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get ccc @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::ccc
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_codeRange_extensions() async {
-    var library = await buildLibrary('''
-class A {}
-
-extension Raw on A {}
-
-/// Comment 1.
-/// Comment 2.
-extension HasDocComment on A {}
-
-@Object()
-extension HasAnnotation on A {}
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-extension AnnotationThenComment on A {}
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-extension CommentThenAnnotation on A {}
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-extension CommentAroundAnnotation on A {}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 10
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      extensions
-        Raw @22
-          reference: <testLibraryFragment>::@extension::Raw
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 12
-          codeLength: 21
-          extendedType: A
-        HasDocComment @75
-          reference: <testLibraryFragment>::@extension::HasDocComment
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          codeOffset: 35
-          codeLength: 61
-          extendedType: A
-        HasAnnotation @118
-          reference: <testLibraryFragment>::@extension::HasAnnotation
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @98
-              name: SimpleIdentifier
-                token: Object @99
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @105
-                rightParenthesis: ) @106
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 98
-          codeLength: 41
-          extendedType: A
-        AnnotationThenComment @191
-          reference: <testLibraryFragment>::@extension::AnnotationThenComment
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @141
-              name: SimpleIdentifier
-                token: Object @142
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @148
-                rightParenthesis: ) @149
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 141
-          codeLength: 79
-          extendedType: A
-        CommentThenAnnotation @272
-          reference: <testLibraryFragment>::@extension::CommentThenAnnotation
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @252
-              name: SimpleIdentifier
-                token: Object @253
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @259
-                rightParenthesis: ) @260
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 222
-          codeLength: 79
-          extendedType: A
-        CommentAroundAnnotation @353
-          reference: <testLibraryFragment>::@extension::CommentAroundAnnotation
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @318
-              name: SimpleIdentifier
-                token: Object @319
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @325
-                rightParenthesis: ) @326
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 318
-          codeLength: 66
-          extendedType: A
-''');
-  }
-
-  test_codeRange_field() async {
-    var library = await buildLibrary('''
-class C {
-  int withInit = 1;
-
-  int withoutInit;
-
-  int multiWithInit = 2, multiWithoutInit, multiWithInit2 = 3;
-}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 115
-          fields
-            withInit @16
-              reference: <testLibraryFragment>::@class::C::@field::withInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              codeOffset: 12
-              codeLength: 16
-              type: int
-              shouldUseTypeForInitializerInference: true
-            withoutInit @37
-              reference: <testLibraryFragment>::@class::C::@field::withoutInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              codeOffset: 33
-              codeLength: 15
-              type: int
-            multiWithInit @57
-              reference: <testLibraryFragment>::@class::C::@field::multiWithInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              codeOffset: 53
-              codeLength: 21
-              type: int
-              shouldUseTypeForInitializerInference: true
-            multiWithoutInit @76
-              reference: <testLibraryFragment>::@class::C::@field::multiWithoutInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              codeOffset: 76
-              codeLength: 16
-              type: int
-            multiWithInit2 @94
-              reference: <testLibraryFragment>::@class::C::@field::multiWithInit2
-              enclosingElement: <testLibraryFragment>::@class::C
-              codeOffset: 94
-              codeLength: 18
-              type: int
-              shouldUseTypeForInitializerInference: true
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get withInit @-1
-              reference: <testLibraryFragment>::@class::C::@getter::withInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set withInit= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::withInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _withInit @-1
-                  type: int
-              returnType: void
-            synthetic get withoutInit @-1
-              reference: <testLibraryFragment>::@class::C::@getter::withoutInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set withoutInit= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::withoutInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _withoutInit @-1
-                  type: int
-              returnType: void
-            synthetic get multiWithInit @-1
-              reference: <testLibraryFragment>::@class::C::@getter::multiWithInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set multiWithInit= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::multiWithInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _multiWithInit @-1
-                  type: int
-              returnType: void
-            synthetic get multiWithoutInit @-1
-              reference: <testLibraryFragment>::@class::C::@getter::multiWithoutInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set multiWithoutInit= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::multiWithoutInit
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _multiWithoutInit @-1
-                  type: int
-              returnType: void
-            synthetic get multiWithInit2 @-1
-              reference: <testLibraryFragment>::@class::C::@getter::multiWithInit2
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set multiWithInit2= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::multiWithInit2
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _multiWithInit2 @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_codeRange_field_annotations() async {
-    var library = await buildLibrary('''
-class C {
-  /// Comment 1.
-  /// Comment 2.
-  int hasDocComment, hasDocComment2;
-
-  @Object()
-  int hasAnnotation, hasAnnotation2;
-
-  @Object()
-  /// Comment 1.
-  /// Comment 2.
-  int annotationThenComment, annotationThenComment2;
-
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  int commentThenAnnotation, commentThenAnnotation2;
-
-  /// Comment 1.
-  @Object()
-  /// Comment 2.
-  int commentAroundAnnotation, commentAroundAnnotation2;
-}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 436
-          fields
-            hasDocComment @50
-              reference: <testLibraryFragment>::@class::C::@field::hasDocComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              codeOffset: 12
-              codeLength: 51
-              type: int
-            hasDocComment2 @65
-              reference: <testLibraryFragment>::@class::C::@field::hasDocComment2
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              codeOffset: 65
-              codeLength: 14
-              type: int
-            hasAnnotation @100
-              reference: <testLibraryFragment>::@class::C::@field::hasAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @84
-                  name: SimpleIdentifier
-                    token: Object @85
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @91
-                    rightParenthesis: ) @92
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 84
-              codeLength: 29
-              type: int
-            hasAnnotation2 @115
-              reference: <testLibraryFragment>::@class::C::@field::hasAnnotation2
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @84
-                  name: SimpleIdentifier
-                    token: Object @85
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @91
-                    rightParenthesis: ) @92
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 115
-              codeLength: 14
-              type: int
-            annotationThenComment @184
-              reference: <testLibraryFragment>::@class::C::@field::annotationThenComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @134
-                  name: SimpleIdentifier
-                    token: Object @135
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @141
-                    rightParenthesis: ) @142
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 134
-              codeLength: 71
-              type: int
-            annotationThenComment2 @207
-              reference: <testLibraryFragment>::@class::C::@field::annotationThenComment2
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @134
-                  name: SimpleIdentifier
-                    token: Object @135
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @141
-                    rightParenthesis: ) @142
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 207
-              codeLength: 22
-              type: int
-            commentThenAnnotation @284
-              reference: <testLibraryFragment>::@class::C::@field::commentThenAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @268
-                  name: SimpleIdentifier
-                    token: Object @269
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @275
-                    rightParenthesis: ) @276
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 234
-              codeLength: 71
-              type: int
-            commentThenAnnotation2 @307
-              reference: <testLibraryFragment>::@class::C::@field::commentThenAnnotation2
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @268
-                  name: SimpleIdentifier
-                    token: Object @269
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @275
-                    rightParenthesis: ) @276
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 307
-              codeLength: 22
-              type: int
-            commentAroundAnnotation @384
-              reference: <testLibraryFragment>::@class::C::@field::commentAroundAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @351
-                  name: SimpleIdentifier
-                    token: Object @352
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @358
-                    rightParenthesis: ) @359
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 351
-              codeLength: 56
-              type: int
-            commentAroundAnnotation2 @409
-              reference: <testLibraryFragment>::@class::C::@field::commentAroundAnnotation2
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @351
-                  name: SimpleIdentifier
-                    token: Object @352
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @358
-                    rightParenthesis: ) @359
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 409
-              codeLength: 24
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get hasDocComment @-1
-              reference: <testLibraryFragment>::@class::C::@getter::hasDocComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set hasDocComment= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::hasDocComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _hasDocComment @-1
-                  type: int
-              returnType: void
-            synthetic get hasDocComment2 @-1
-              reference: <testLibraryFragment>::@class::C::@getter::hasDocComment2
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set hasDocComment2= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::hasDocComment2
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _hasDocComment2 @-1
-                  type: int
-              returnType: void
-            synthetic get hasAnnotation @-1
-              reference: <testLibraryFragment>::@class::C::@getter::hasAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set hasAnnotation= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::hasAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _hasAnnotation @-1
-                  type: int
-              returnType: void
-            synthetic get hasAnnotation2 @-1
-              reference: <testLibraryFragment>::@class::C::@getter::hasAnnotation2
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set hasAnnotation2= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::hasAnnotation2
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _hasAnnotation2 @-1
-                  type: int
-              returnType: void
-            synthetic get annotationThenComment @-1
-              reference: <testLibraryFragment>::@class::C::@getter::annotationThenComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set annotationThenComment= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::annotationThenComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _annotationThenComment @-1
-                  type: int
-              returnType: void
-            synthetic get annotationThenComment2 @-1
-              reference: <testLibraryFragment>::@class::C::@getter::annotationThenComment2
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set annotationThenComment2= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::annotationThenComment2
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _annotationThenComment2 @-1
-                  type: int
-              returnType: void
-            synthetic get commentThenAnnotation @-1
-              reference: <testLibraryFragment>::@class::C::@getter::commentThenAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set commentThenAnnotation= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::commentThenAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _commentThenAnnotation @-1
-                  type: int
-              returnType: void
-            synthetic get commentThenAnnotation2 @-1
-              reference: <testLibraryFragment>::@class::C::@getter::commentThenAnnotation2
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set commentThenAnnotation2= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::commentThenAnnotation2
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _commentThenAnnotation2 @-1
-                  type: int
-              returnType: void
-            synthetic get commentAroundAnnotation @-1
-              reference: <testLibraryFragment>::@class::C::@getter::commentAroundAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set commentAroundAnnotation= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::commentAroundAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _commentAroundAnnotation @-1
-                  type: int
-              returnType: void
-            synthetic get commentAroundAnnotation2 @-1
-              reference: <testLibraryFragment>::@class::C::@getter::commentAroundAnnotation2
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set commentAroundAnnotation2= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::commentAroundAnnotation2
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _commentAroundAnnotation2 @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_codeRange_function() async {
-    var library = await buildLibrary('''
-void raw() {}
-
-/// Comment 1.
-/// Comment 2.
-void hasDocComment() {}
-
-@Object()
-void hasAnnotation() {}
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-void annotationThenComment() {}
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-void commentThenAnnotation() {}
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-void commentAroundAnnotation() {}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        raw @5
-          reference: <testLibraryFragment>::@function::raw
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 13
-          returnType: void
-        hasDocComment @50
-          reference: <testLibraryFragment>::@function::hasDocComment
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          codeOffset: 15
-          codeLength: 53
-          returnType: void
-        hasAnnotation @85
-          reference: <testLibraryFragment>::@function::hasAnnotation
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @70
-              name: SimpleIdentifier
-                token: Object @71
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @77
-                rightParenthesis: ) @78
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 70
-          codeLength: 33
-          returnType: void
-        annotationThenComment @150
-          reference: <testLibraryFragment>::@function::annotationThenComment
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @105
-              name: SimpleIdentifier
-                token: Object @106
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @112
-                rightParenthesis: ) @113
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 105
-          codeLength: 71
-          returnType: void
-        commentThenAnnotation @223
-          reference: <testLibraryFragment>::@function::commentThenAnnotation
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @208
-              name: SimpleIdentifier
-                token: Object @209
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @215
-                rightParenthesis: ) @216
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 178
-          codeLength: 71
-          returnType: void
-        commentAroundAnnotation @296
-          reference: <testLibraryFragment>::@function::commentAroundAnnotation
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @266
-              name: SimpleIdentifier
-                token: Object @267
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @273
-                rightParenthesis: ) @274
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 266
-          codeLength: 58
-          returnType: void
-''');
-  }
-
-  test_codeRange_functionTypeAlias() async {
-    var library = await buildLibrary('''
-typedef Raw();
-
-/// Comment 1.
-/// Comment 2.
-typedef HasDocComment();
-
-@Object()
-typedef HasAnnotation();
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-typedef AnnotationThenComment();
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-typedef CommentThenAnnotation();
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-typedef CommentAroundAnnotation();
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased Raw @8
-          reference: <testLibraryFragment>::@typeAlias::Raw
-          codeOffset: 0
-          codeLength: 14
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-        functionTypeAliasBased HasDocComment @54
-          reference: <testLibraryFragment>::@typeAlias::HasDocComment
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          codeOffset: 16
-          codeLength: 54
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-        functionTypeAliasBased HasAnnotation @90
-          reference: <testLibraryFragment>::@typeAlias::HasAnnotation
-          metadata
-            Annotation
-              atSign: @ @72
-              name: SimpleIdentifier
-                token: Object @73
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @79
-                rightParenthesis: ) @80
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 72
-          codeLength: 34
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-        functionTypeAliasBased AnnotationThenComment @156
-          reference: <testLibraryFragment>::@typeAlias::AnnotationThenComment
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @108
-              name: SimpleIdentifier
-                token: Object @109
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @115
-                rightParenthesis: ) @116
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 108
-          codeLength: 72
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-        functionTypeAliasBased CommentThenAnnotation @230
-          reference: <testLibraryFragment>::@typeAlias::CommentThenAnnotation
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @212
-              name: SimpleIdentifier
-                token: Object @213
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @219
-                rightParenthesis: ) @220
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 182
-          codeLength: 72
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-        functionTypeAliasBased CommentAroundAnnotation @304
-          reference: <testLibraryFragment>::@typeAlias::CommentAroundAnnotation
-          documentationComment: /// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @271
-              name: SimpleIdentifier
-                token: Object @272
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @278
-                rightParenthesis: ) @279
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 271
-          codeLength: 59
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-''');
-  }
-
-  test_codeRange_genericTypeAlias() async {
-    var library = await buildLibrary('''
-typedef Raw = Function();
-
-/// Comment 1.
-/// Comment 2.
-typedef HasDocComment = Function();
-
-@Object()
-typedef HasAnnotation = Function();
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-typedef AnnotationThenComment = Function();
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-typedef CommentThenAnnotation = Function();
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-typedef CommentAroundAnnotation = Function();
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        Raw @8
-          reference: <testLibraryFragment>::@typeAlias::Raw
-          codeOffset: 0
-          codeLength: 25
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-        HasDocComment @65
-          reference: <testLibraryFragment>::@typeAlias::HasDocComment
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          codeOffset: 27
-          codeLength: 65
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-        HasAnnotation @112
-          reference: <testLibraryFragment>::@typeAlias::HasAnnotation
-          metadata
-            Annotation
-              atSign: @ @94
-              name: SimpleIdentifier
-                token: Object @95
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @101
-                rightParenthesis: ) @102
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 94
-          codeLength: 45
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-        AnnotationThenComment @189
-          reference: <testLibraryFragment>::@typeAlias::AnnotationThenComment
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @141
-              name: SimpleIdentifier
-                token: Object @142
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @148
-                rightParenthesis: ) @149
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 141
-          codeLength: 83
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-        CommentThenAnnotation @274
-          reference: <testLibraryFragment>::@typeAlias::CommentThenAnnotation
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @256
-              name: SimpleIdentifier
-                token: Object @257
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @263
-                rightParenthesis: ) @264
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 226
-          codeLength: 83
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-        CommentAroundAnnotation @359
-          reference: <testLibraryFragment>::@typeAlias::CommentAroundAnnotation
-          documentationComment: /// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @326
-              name: SimpleIdentifier
-                token: Object @327
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @333
-                rightParenthesis: ) @334
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 326
-          codeLength: 70
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-''');
-  }
-
-  test_codeRange_method() async {
-    var library = await buildLibrary('''
-class C {
-  void raw() {}
-
-  /// Comment 1.
-  /// Comment 2.
-  void hasDocComment() {}
-
-  @Object()
-  void hasAnnotation() {}
-
-  @Object()
-  /// Comment 1.
-  /// Comment 2.
-  void annotationThenComment() {}
-
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  void commentThenAnnotation() {}
-
-  /// Comment 1.
-  @Object()
-  /// Comment 2.
-  void commentAroundAnnotation() {}
-}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 372
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            raw @17
-              reference: <testLibraryFragment>::@class::C::@method::raw
-              enclosingElement: <testLibraryFragment>::@class::C
-              codeOffset: 12
-              codeLength: 13
-              returnType: void
-            hasDocComment @68
-              reference: <testLibraryFragment>::@class::C::@method::hasDocComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              codeOffset: 29
-              codeLength: 57
-              returnType: void
-            hasAnnotation @107
-              reference: <testLibraryFragment>::@class::C::@method::hasAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @90
-                  name: SimpleIdentifier
-                    token: Object @91
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @97
-                    rightParenthesis: ) @98
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 90
-              codeLength: 35
-              returnType: void
-            annotationThenComment @180
-              reference: <testLibraryFragment>::@class::C::@method::annotationThenComment
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @129
-                  name: SimpleIdentifier
-                    token: Object @130
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @136
-                    rightParenthesis: ) @137
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 129
-              codeLength: 77
-              returnType: void
-            commentThenAnnotation @261
-              reference: <testLibraryFragment>::@class::C::@method::commentThenAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 1.\n/// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @244
-                  name: SimpleIdentifier
-                    token: Object @245
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @251
-                    rightParenthesis: ) @252
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 210
-              codeLength: 77
-              returnType: void
-            commentAroundAnnotation @342
-              reference: <testLibraryFragment>::@class::C::@method::commentAroundAnnotation
-              enclosingElement: <testLibraryFragment>::@class::C
-              documentationComment: /// Comment 2.
-              metadata
-                Annotation
-                  atSign: @ @308
-                  name: SimpleIdentifier
-                    token: Object @309
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @315
-                    rightParenthesis: ) @316
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 308
-              codeLength: 62
-              returnType: void
-''');
-  }
-
-  test_codeRange_parameter() async {
-    var library = await buildLibrary('''
-main({int a = 1, int b, int c = 2}) {}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        main @0
-          reference: <testLibraryFragment>::@function::main
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 38
-          parameters
-            optionalNamed default a @10
-              reference: <testLibraryFragment>::@function::main::@parameter::a
-              type: int
-              codeOffset: 6
-              codeLength: 9
-              constantInitializer
-                IntegerLiteral
-                  literal: 1 @14
-                  staticType: int
-            optionalNamed default b @21
-              reference: <testLibraryFragment>::@function::main::@parameter::b
-              type: int
-              codeOffset: 17
-              codeLength: 5
-            optionalNamed default c @28
-              reference: <testLibraryFragment>::@function::main::@parameter::c
-              type: int
-              codeOffset: 24
-              codeLength: 9
-              constantInitializer
-                IntegerLiteral
-                  literal: 2 @32
-                  staticType: int
-          returnType: dynamic
-''');
-  }
-
-  test_codeRange_parameter_annotations() async {
-    var library = await buildLibrary('''
-main(@Object() int a, int b, @Object() int c) {}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        main @0
-          reference: <testLibraryFragment>::@function::main
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 48
-          parameters
-            requiredPositional a @19
-              type: int
-              metadata
-                Annotation
-                  atSign: @ @5
-                  name: SimpleIdentifier
-                    token: Object @6
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @12
-                    rightParenthesis: ) @13
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 5
-              codeLength: 15
-            requiredPositional b @26
-              type: int
-              codeOffset: 22
-              codeLength: 5
-            requiredPositional c @43
-              type: int
-              metadata
-                Annotation
-                  atSign: @ @29
-                  name: SimpleIdentifier
-                    token: Object @30
-                    staticElement: dart:core::<fragment>::@class::Object
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @36
-                    rightParenthesis: ) @37
-                  element: dart:core::<fragment>::@class::Object::@constructor::new
-              codeOffset: 29
-              codeLength: 15
-          returnType: dynamic
-''');
-  }
-
-  test_codeRange_topLevelVariable() async {
-    var library = await buildLibrary('''
-int withInit = 1 + 2 * 3;
-
-int withoutInit;
-
-int multiWithInit = 2, multiWithoutInit, multiWithInit2 = 3;
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static withInit @4
-          reference: <testLibraryFragment>::@topLevelVariable::withInit
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 24
-          type: int
-          shouldUseTypeForInitializerInference: true
-        static withoutInit @31
-          reference: <testLibraryFragment>::@topLevelVariable::withoutInit
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 27
-          codeLength: 15
-          type: int
-        static multiWithInit @49
-          reference: <testLibraryFragment>::@topLevelVariable::multiWithInit
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 45
-          codeLength: 21
-          type: int
-          shouldUseTypeForInitializerInference: true
-        static multiWithoutInit @68
-          reference: <testLibraryFragment>::@topLevelVariable::multiWithoutInit
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 68
-          codeLength: 16
-          type: int
-        static multiWithInit2 @86
-          reference: <testLibraryFragment>::@topLevelVariable::multiWithInit2
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 86
-          codeLength: 18
-          type: int
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get withInit @-1
-          reference: <testLibraryFragment>::@getter::withInit
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set withInit= @-1
-          reference: <testLibraryFragment>::@setter::withInit
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _withInit @-1
-              type: int
-          returnType: void
-        synthetic static get withoutInit @-1
-          reference: <testLibraryFragment>::@getter::withoutInit
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set withoutInit= @-1
-          reference: <testLibraryFragment>::@setter::withoutInit
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _withoutInit @-1
-              type: int
-          returnType: void
-        synthetic static get multiWithInit @-1
-          reference: <testLibraryFragment>::@getter::multiWithInit
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set multiWithInit= @-1
-          reference: <testLibraryFragment>::@setter::multiWithInit
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _multiWithInit @-1
-              type: int
-          returnType: void
-        synthetic static get multiWithoutInit @-1
-          reference: <testLibraryFragment>::@getter::multiWithoutInit
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set multiWithoutInit= @-1
-          reference: <testLibraryFragment>::@setter::multiWithoutInit
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _multiWithoutInit @-1
-              type: int
-          returnType: void
-        synthetic static get multiWithInit2 @-1
-          reference: <testLibraryFragment>::@getter::multiWithInit2
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set multiWithInit2= @-1
-          reference: <testLibraryFragment>::@setter::multiWithInit2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _multiWithInit2 @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_codeRange_topLevelVariable_annotations() async {
-    var library = await buildLibrary('''
-/// Comment 1.
-/// Comment 2.
-int hasDocComment, hasDocComment2;
-
-@Object()
-int hasAnnotation, hasAnnotation2;
-
-@Object()
-/// Comment 1.
-/// Comment 2.
-int annotationThenComment, annotationThenComment2;
-
-/// Comment 1.
-/// Comment 2.
-@Object()
-int commentThenAnnotation, commentThenAnnotation2;
-
-/// Comment 1.
-@Object()
-/// Comment 2.
-int commentAroundAnnotation, commentAroundAnnotation2;
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static hasDocComment @34
-          reference: <testLibraryFragment>::@topLevelVariable::hasDocComment
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          codeOffset: 0
-          codeLength: 47
-          type: int
-        static hasDocComment2 @49
-          reference: <testLibraryFragment>::@topLevelVariable::hasDocComment2
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          codeOffset: 49
-          codeLength: 14
-          type: int
-        static hasAnnotation @80
-          reference: <testLibraryFragment>::@topLevelVariable::hasAnnotation
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @66
-              name: SimpleIdentifier
-                token: Object @67
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @73
-                rightParenthesis: ) @74
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 66
-          codeLength: 27
-          type: int
-        static hasAnnotation2 @95
-          reference: <testLibraryFragment>::@topLevelVariable::hasAnnotation2
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @66
-              name: SimpleIdentifier
-                token: Object @67
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @73
-                rightParenthesis: ) @74
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 95
-          codeLength: 14
-          type: int
-        static annotationThenComment @156
-          reference: <testLibraryFragment>::@topLevelVariable::annotationThenComment
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @112
-              name: SimpleIdentifier
-                token: Object @113
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @119
-                rightParenthesis: ) @120
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 112
-          codeLength: 65
-          type: int
-        static annotationThenComment2 @179
-          reference: <testLibraryFragment>::@topLevelVariable::annotationThenComment2
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @112
-              name: SimpleIdentifier
-                token: Object @113
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @119
-                rightParenthesis: ) @120
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 179
-          codeLength: 22
-          type: int
-        static commentThenAnnotation @248
-          reference: <testLibraryFragment>::@topLevelVariable::commentThenAnnotation
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @234
-              name: SimpleIdentifier
-                token: Object @235
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @241
-                rightParenthesis: ) @242
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 204
-          codeLength: 65
-          type: int
-        static commentThenAnnotation2 @271
-          reference: <testLibraryFragment>::@topLevelVariable::commentThenAnnotation2
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 1.\n/// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @234
-              name: SimpleIdentifier
-                token: Object @235
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @241
-                rightParenthesis: ) @242
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 271
-          codeLength: 22
-          type: int
-        static commentAroundAnnotation @340
-          reference: <testLibraryFragment>::@topLevelVariable::commentAroundAnnotation
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @311
-              name: SimpleIdentifier
-                token: Object @312
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @318
-                rightParenthesis: ) @319
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 311
-          codeLength: 52
-          type: int
-        static commentAroundAnnotation2 @365
-          reference: <testLibraryFragment>::@topLevelVariable::commentAroundAnnotation2
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Comment 2.
-          metadata
-            Annotation
-              atSign: @ @311
-              name: SimpleIdentifier
-                token: Object @312
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @318
-                rightParenthesis: ) @319
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          codeOffset: 365
-          codeLength: 24
-          type: int
-      accessors
-        synthetic static get hasDocComment @-1
-          reference: <testLibraryFragment>::@getter::hasDocComment
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set hasDocComment= @-1
-          reference: <testLibraryFragment>::@setter::hasDocComment
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _hasDocComment @-1
-              type: int
-          returnType: void
-        synthetic static get hasDocComment2 @-1
-          reference: <testLibraryFragment>::@getter::hasDocComment2
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set hasDocComment2= @-1
-          reference: <testLibraryFragment>::@setter::hasDocComment2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _hasDocComment2 @-1
-              type: int
-          returnType: void
-        synthetic static get hasAnnotation @-1
-          reference: <testLibraryFragment>::@getter::hasAnnotation
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set hasAnnotation= @-1
-          reference: <testLibraryFragment>::@setter::hasAnnotation
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _hasAnnotation @-1
-              type: int
-          returnType: void
-        synthetic static get hasAnnotation2 @-1
-          reference: <testLibraryFragment>::@getter::hasAnnotation2
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set hasAnnotation2= @-1
-          reference: <testLibraryFragment>::@setter::hasAnnotation2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _hasAnnotation2 @-1
-              type: int
-          returnType: void
-        synthetic static get annotationThenComment @-1
-          reference: <testLibraryFragment>::@getter::annotationThenComment
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set annotationThenComment= @-1
-          reference: <testLibraryFragment>::@setter::annotationThenComment
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _annotationThenComment @-1
-              type: int
-          returnType: void
-        synthetic static get annotationThenComment2 @-1
-          reference: <testLibraryFragment>::@getter::annotationThenComment2
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set annotationThenComment2= @-1
-          reference: <testLibraryFragment>::@setter::annotationThenComment2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _annotationThenComment2 @-1
-              type: int
-          returnType: void
-        synthetic static get commentThenAnnotation @-1
-          reference: <testLibraryFragment>::@getter::commentThenAnnotation
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set commentThenAnnotation= @-1
-          reference: <testLibraryFragment>::@setter::commentThenAnnotation
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _commentThenAnnotation @-1
-              type: int
-          returnType: void
-        synthetic static get commentThenAnnotation2 @-1
-          reference: <testLibraryFragment>::@getter::commentThenAnnotation2
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set commentThenAnnotation2= @-1
-          reference: <testLibraryFragment>::@setter::commentThenAnnotation2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _commentThenAnnotation2 @-1
-              type: int
-          returnType: void
-        synthetic static get commentAroundAnnotation @-1
-          reference: <testLibraryFragment>::@getter::commentAroundAnnotation
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set commentAroundAnnotation= @-1
-          reference: <testLibraryFragment>::@setter::commentAroundAnnotation
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _commentAroundAnnotation @-1
-              type: int
-          returnType: void
-        synthetic static get commentAroundAnnotation2 @-1
-          reference: <testLibraryFragment>::@getter::commentAroundAnnotation2
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set commentAroundAnnotation2= @-1
-          reference: <testLibraryFragment>::@setter::commentAroundAnnotation2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _commentAroundAnnotation2 @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_codeRange_type_parameter() async {
-    var library = await buildLibrary('''
-class A<T> {}
-void f<U extends num> {}
-''');
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 13
-          typeParameters
-            covariant T @8
-              codeOffset: 8
-              codeLength: 1
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      functions
-        f @19
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 14
-          codeLength: 24
-          typeParameters
-            covariant U @21
-              codeOffset: 21
-              codeLength: 13
-              bound: num
-              defaultType: num
-          returnType: void
-''');
-  }
-
-  test_const_asExpression() async {
-    var library = await buildLibrary('''
-const num a = 0;
-const b = a as int;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @10
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: num
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @14
-              staticType: int
-        static const b @23
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            AsExpression
-              expression: SimpleIdentifier
-                token: a @27
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: num
-              asOperator: as @29
-              type: NamedType
-                name: int @32
-                element: dart:core::<fragment>::@class::int
-                type: int
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: num
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_assignmentExpression() async {
-    var library = await buildLibrary(r'''
-const a = 0;
-const b = (a += 1);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @10
-              staticType: int
-        static const b @19
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ParenthesizedExpression
-              leftParenthesis: ( @23
-              expression: AssignmentExpression
-                leftHandSide: SimpleIdentifier
-                  token: a @24
-                  staticElement: <null>
-                  staticType: null
-                operator: += @26
-                rightHandSide: IntegerLiteral
-                  literal: 1 @29
-                  staticType: int
-                readElement: <testLibraryFragment>::@getter::a
-                readType: int
-                writeElement: <testLibraryFragment>::@getter::a
-                writeType: InvalidType
-                staticElement: dart:core::<fragment>::@class::num::@method::+
-                staticType: int
-              rightParenthesis: ) @30
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_cascadeExpression() async {
-    var library = await buildLibrary(r'''
-const a = 0..isEven..abs();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            CascadeExpression
-              target: IntegerLiteral
-                literal: 0 @10
-                staticType: int
-              cascadeSections
-                PropertyAccess
-                  operator: .. @11
-                  propertyName: SimpleIdentifier
-                    token: isEven @13
-                    staticElement: dart:core::<fragment>::@class::int::@getter::isEven
-                    staticType: bool
-                  staticType: bool
-                MethodInvocation
-                  operator: .. @19
-                  methodName: SimpleIdentifier
-                    token: abs @21
-                    staticElement: dart:core::<fragment>::@class::int::@method::abs
-                    staticType: int Function()
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @24
-                    rightParenthesis: ) @25
-                  staticInvokeType: int Function()
-                  staticType: int
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_classField() async {
-    var library = await buildLibrary(r'''
-class C {
-  static const int f1 = 1;
-  static const int f2 = C.f1, f3 = C.f2;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const f1 @29
-              reference: <testLibraryFragment>::@class::C::@field::f1
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 1 @34
-                  staticType: int
-            static const f2 @56
-              reference: <testLibraryFragment>::@class::C::@field::f2
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: C @61
-                    staticElement: <testLibraryFragment>::@class::C
-                    staticType: null
-                  period: . @62
-                  identifier: SimpleIdentifier
-                    token: f1 @63
-                    staticElement: <testLibraryFragment>::@class::C::@getter::f1
-                    staticType: int
-                  staticElement: <testLibraryFragment>::@class::C::@getter::f1
-                  staticType: int
-            static const f3 @67
-              reference: <testLibraryFragment>::@class::C::@field::f3
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: C @72
-                    staticElement: <testLibraryFragment>::@class::C
-                    staticType: null
-                  period: . @73
-                  identifier: SimpleIdentifier
-                    token: f2 @74
-                    staticElement: <testLibraryFragment>::@class::C::@getter::f2
-                    staticType: int
-                  staticElement: <testLibraryFragment>::@class::C::@getter::f2
-                  staticType: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get f1 @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f1
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic static get f2 @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f2
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic static get f3 @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f3
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_const_constructor_inferred_args() async {
-    var library = await buildLibrary('''
-class C<T> {
-  final T t;
-  const C(this.t);
-  const C.named(this.t);
-}
-const Object x = const C(0);
-const Object y = const C.named(0);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          fields
-            final t @23
-              reference: <testLibraryFragment>::@class::C::@field::t
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: T
-          constructors
-            const @34
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.t @41
-                  type: T
-                  field: <testLibraryFragment>::@class::C::@field::t
-            const named @55
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 54
-              nameEnd: 60
-              parameters
-                requiredPositional final this.t @66
-                  type: T
-                  field: <testLibraryFragment>::@class::C::@field::t
-          accessors
-            synthetic get t @-1
-              reference: <testLibraryFragment>::@class::C::@getter::t
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: T
-      topLevelVariables
-        static const x @85
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @89
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @95
-                  element: <testLibraryFragment>::@class::C
-                  type: C<int>
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::C::@constructor::new
-                  substitution: {T: int}
-              argumentList: ArgumentList
-                leftParenthesis: ( @96
-                arguments
-                  IntegerLiteral
-                    literal: 0 @97
-                    staticType: int
-                rightParenthesis: ) @98
-              staticType: C<int>
-        static const y @114
-          reference: <testLibraryFragment>::@topLevelVariable::y
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @118
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @124
-                  element: <testLibraryFragment>::@class::C
-                  type: C<int>
-                period: . @125
-                name: SimpleIdentifier
-                  token: named @126
-                  staticElement: ConstructorMember
-                    base: <testLibraryFragment>::@class::C::@constructor::named
-                    substitution: {T: dynamic}
-                  staticType: null
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::C::@constructor::named
-                  substitution: {T: int}
-              argumentList: ArgumentList
-                leftParenthesis: ( @131
-                arguments
-                  IntegerLiteral
-                    literal: 0 @132
-                    staticType: int
-                rightParenthesis: ) @133
-              staticType: C<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-        synthetic static get y @-1
-          reference: <testLibraryFragment>::@getter::y
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-    var x = library.definingCompilationUnit.topLevelVariables[0];
-    var xExpr = x.constantInitializer as InstanceCreationExpression;
-    var xType = xExpr.constructorName.staticElement!.returnType;
-    _assertTypeStr(
-      xType,
-      'C<int>',
-    );
-    var y = library.definingCompilationUnit.topLevelVariables[0];
-    var yExpr = y.constantInitializer as InstanceCreationExpression;
-    var yType = yExpr.constructorName.staticElement!.returnType;
-    _assertTypeStr(yType, 'C<int>');
-  }
-
-  test_const_constructorReference() async {
-    var library = await buildLibrary(r'''
-class A {
-  A.named();
-}
-const v = A.named;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            named @14
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 13
-              nameEnd: 19
-      topLevelVariables
-        static const v @31
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: A Function()
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ConstructorReference
-              constructorName: ConstructorName
-                type: NamedType
-                  name: A @35
-                  element: <testLibraryFragment>::@class::A
-                  type: null
-                period: . @36
-                name: SimpleIdentifier
-                  token: named @37
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::named
-                  staticType: null
-                staticElement: <testLibraryFragment>::@class::A::@constructor::named
-              staticType: A Function()
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: A Function()
-''');
-  }
-
-  test_const_finalField_hasConstConstructor() async {
-    var library = await buildLibrary(r'''
-class C {
-  final int f = 42;
-  const C();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final f @22
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 42 @26
-                  staticType: int
-          constructors
-            const @38
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-''');
-  }
-
-  test_const_functionExpression_typeArgumentTypes() async {
-    var library = await buildLibrary('''
-void f<T>(T a) {}
-
-const void Function(int) v = f;
-''');
-    checkElementText(library, '''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v @44
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: void Function(int)
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            FunctionReference
-              function: SimpleIdentifier
-                token: f @48
-                staticElement: <testLibraryFragment>::@function::f
-                staticType: void Function<T>(T)
-              staticType: void Function(int)
-              typeArgumentTypes
-                int
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: void Function(int)
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-          parameters
-            requiredPositional a @12
-              type: T
-          returnType: void
-''');
-  }
-
-  test_const_functionReference() async {
-    var library = await buildLibrary(r'''
-void f<T>(T a) {}
-const v = f<int>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v @24
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: void Function(int)
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            FunctionReference
-              function: SimpleIdentifier
-                token: f @28
-                staticElement: <testLibraryFragment>::@function::f
-                staticType: void Function<T>(T)
-              typeArguments: TypeArgumentList
-                leftBracket: < @29
-                arguments
-                  NamedType
-                    name: int @30
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @33
-              staticType: void Function(int)
-              typeArgumentTypes
-                int
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: void Function(int)
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-          parameters
-            requiredPositional a @12
-              type: T
-          returnType: void
-''');
-  }
-
-  test_const_indexExpression() async {
-    var library = await buildLibrary(r'''
-const a = [0];
-const b = 0;
-const c = a[b];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: List<int>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ListLiteral
-              leftBracket: [ @10
-              elements
-                IntegerLiteral
-                  literal: 0 @11
-                  staticType: int
-              rightBracket: ] @12
-              staticType: List<int>
-        static const b @21
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @25
-              staticType: int
-        static const c @34
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IndexExpression
-              target: SimpleIdentifier
-                token: a @38
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: List<int>
-              leftBracket: [ @39
-              index: SimpleIdentifier
-                token: b @40
-                staticElement: <testLibraryFragment>::@getter::b
-                staticType: int
-              rightBracket: ] @41
-              staticElement: MethodMember
-                base: dart:core::<fragment>::@class::List::@method::[]
-                substitution: {E: int}
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: List<int>
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_inference_downward_list() async {
-    var library = await buildLibrary('''
-class P<T> {
-  const P();
-}
-
-class P1<T> extends P<T> {
-  const P1();
-}
-
-class P2<T> extends P<T> {
-  const P2();
-}
-
-const List<P> values = [
-  P1(),
-  P2<int>(),
-];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class P @6
-          reference: <testLibraryFragment>::@class::P
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::P::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::P
-        class P1 @35
-          reference: <testLibraryFragment>::@class::P1
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @38
-              defaultType: dynamic
-          supertype: P<T>
-          constructors
-            const @64
-              reference: <testLibraryFragment>::@class::P1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::P1
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::P::@constructor::new
-                substitution: {T: T}
-        class P2 @79
-          reference: <testLibraryFragment>::@class::P2
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @82
-              defaultType: dynamic
-          supertype: P<T>
-          constructors
-            const @108
-              reference: <testLibraryFragment>::@class::P2::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::P2
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::P::@constructor::new
-                substitution: {T: T}
-      topLevelVariables
-        static const values @131
-          reference: <testLibraryFragment>::@topLevelVariable::values
-          enclosingElement: <testLibraryFragment>
-          type: List<P<dynamic>>
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            ListLiteral
-              leftBracket: [ @140
-              elements
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: P1 @144
-                      element: <testLibraryFragment>::@class::P1
-                      type: P1<dynamic>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@class::P1::@constructor::new
-                      substitution: {T: dynamic}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @146
-                    rightParenthesis: ) @147
-                  staticType: P1<dynamic>
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: P2 @152
-                      typeArguments: TypeArgumentList
-                        leftBracket: < @154
-                        arguments
-                          NamedType
-                            name: int @155
-                            element: dart:core::<fragment>::@class::int
-                            type: int
-                        rightBracket: > @158
-                      element: <testLibraryFragment>::@class::P2
-                      type: P2<int>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@class::P2::@constructor::new
-                      substitution: {T: int}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @159
-                    rightParenthesis: ) @160
-                  staticType: P2<int>
-              rightBracket: ] @163
-              staticType: List<P<dynamic>>
-      accessors
-        synthetic static get values @-1
-          reference: <testLibraryFragment>::@getter::values
-          enclosingElement: <testLibraryFragment>
-          returnType: List<P<dynamic>>
-''');
-  }
-
-  test_const_invalid_field_const() async {
-    var library = await buildLibrary(r'''
-class C {
-  static const f = 1 + foo();
-}
-int foo() => 42;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const f @25
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                BinaryExpression
-                  leftOperand: IntegerLiteral
-                    literal: 1 @29
-                    staticType: int
-                  operator: + @31
-                  rightOperand: MethodInvocation
-                    methodName: SimpleIdentifier
-                      token: foo @33
-                      staticElement: <testLibraryFragment>::@function::foo
-                      staticType: int Function()
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @36
-                      rightParenthesis: ) @37
-                    staticInvokeType: int Function()
-                    staticType: int
-                  staticElement: dart:core::<fragment>::@class::num::@method::+
-                  staticInvokeType: num Function(num)
-                  staticType: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get f @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-      functions
-        foo @46
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_invalid_field_final() async {
-    var library = await buildLibrary(r'''
-class C {
-  final f = 1 + foo();
-}
-int foo() => 42;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final f @18
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-      functions
-        foo @39
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_invalid_functionExpression() async {
-    var library = await buildLibrary('''
-const v = () { return 0; };
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int Function()
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: _notSerializableExpression @-1
-              staticElement: <null>
-              staticType: null
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function()
-''');
-  }
-
-  test_const_invalid_functionExpression_assertInitializer() async {
-    var library = await buildLibrary('''
-class A  {
-  const A() : assert((() => true)());
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @19
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              constantInitializers
-                AssertInitializer
-                  assertKeyword: assert @25
-                  leftParenthesis: ( @31
-                  condition: SimpleIdentifier
-                    token: _notSerializableExpression @-1
-                    staticElement: <null>
-                    staticType: null
-                  rightParenthesis: ) @46
-''');
-  }
-
-  test_const_invalid_functionExpression_assertInitializer_message() async {
-    var library = await buildLibrary('''
-class A  {
-  const A() : assert(b, () => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @19
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              constantInitializers
-                AssertInitializer
-                  assertKeyword: assert @25
-                  leftParenthesis: ( @31
-                  condition: SimpleIdentifier
-                    token: b @32
-                    staticElement: <null>
-                    staticType: InvalidType
-                  comma: , @33
-                  message: SimpleIdentifier
-                    token: _notSerializableExpression @-1
-                    staticElement: <null>
-                    staticType: null
-                  rightParenthesis: ) @42
-''');
-  }
-
-  test_const_invalid_functionExpression_constructorFieldInitializer() async {
-    var library = await buildLibrary('''
-class A {
-  final Object? foo;
-  const A() : foo = (() => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final foo @26
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: Object?
-          constructors
-            const @39
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: foo @45
-                    staticElement: <testLibraryFragment>::@class::A::@field::foo
-                    staticType: null
-                  equals: = @49
-                  expression: SimpleIdentifier
-                    token: _notSerializableExpression @-1
-                    staticElement: <null>
-                    staticType: null
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: Object?
-''');
-  }
-
-  test_const_invalid_functionExpression_nested() async {
-    var library = await buildLibrary('''
-const v = () { return 0; } + 2;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: _notSerializableExpression @-1
-              staticElement: <null>
-              staticType: null
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_const_invalid_functionExpression_redirectingConstructorInvocation() async {
-    var library = await buildLibrary('''
-class A {
-  const A(Object a, Object b);
-  const A.named() : this(0, () => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @27
-                  type: Object
-                requiredPositional b @37
-                  type: Object
-            const named @51
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 50
-              nameEnd: 56
-              constantInitializers
-                RedirectingConstructorInvocation
-                  thisKeyword: this @61
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @65
-                    arguments
-                      IntegerLiteral
-                        literal: 0 @66
-                        staticType: int
-                      SimpleIdentifier
-                        token: _notSerializableExpression @-1
-                        staticElement: <null>
-                        staticType: null
-                    rightParenthesis: ) @76
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              redirectedConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  test_const_invalid_functionExpression_superConstructorInvocation() async {
-    var library = await buildLibrary('''
-class A {
-  const A(Object a, Object b);
-}
-class B extends A {
-  const B() : super(0, () => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @27
-                  type: Object
-                requiredPositional b @37
-                  type: Object
-        class B @49
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            const @71
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @77
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @82
-                    arguments
-                      IntegerLiteral
-                        literal: 0 @83
-                        staticType: int
-                      SimpleIdentifier
-                        token: _notSerializableExpression @-1
-                        staticElement: <null>
-                        staticType: null
-                    rightParenthesis: ) @93
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-''');
-  }
-
-  @SkippedTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
-  test_const_invalid_intLiteral() async {
-    var library = await buildLibrary(r'''
-const int x = 0x;
-''');
-    checkElementText(library, r'''
-const int x = 0;
-''');
-  }
-
-  test_const_invalid_methodInvocation() async {
-    var library = await buildLibrary(r'''
-const a = 'abc'.codeUnitAt(0);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            MethodInvocation
-              target: SimpleStringLiteral
-                literal: 'abc' @10
-              operator: . @15
-              methodName: SimpleIdentifier
-                token: codeUnitAt @16
-                staticElement: dart:core::<fragment>::@class::String::@method::codeUnitAt
-                staticType: int Function(int)
-              argumentList: ArgumentList
-                leftParenthesis: ( @26
-                arguments
-                  IntegerLiteral
-                    literal: 0 @27
-                    staticType: int
-                rightParenthesis: ) @28
-              staticInvokeType: int Function(int)
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_invalid_patternAssignment() async {
-    var library = await buildLibrary('''
-const v = (a,) = (0,);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: (int,)
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: _notSerializableExpression @-1
-              staticElement: <null>
-              staticType: null
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: (int,)
-''');
-  }
-
-  test_const_invalid_topLevel() async {
-    var library = await buildLibrary(r'''
-const v = 1 + foo();
-int foo() => 42;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @10
-                staticType: int
-              operator: + @12
-              rightOperand: MethodInvocation
-                methodName: SimpleIdentifier
-                  token: foo @14
-                  staticElement: <testLibraryFragment>::@function::foo
-                  staticType: int Function()
-                argumentList: ArgumentList
-                  leftParenthesis: ( @17
-                  rightParenthesis: ) @18
-                staticInvokeType: int Function()
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::+
-              staticInvokeType: num Function(num)
-              staticType: int
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-      functions
-        foo @25
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_invalid_topLevel_switchExpression() async {
-    var library = await buildLibrary(r'''
-const a = 0 + switch (true) {_ => 1};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: _notSerializableExpression @-1
-              staticElement: <null>
-              staticType: null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_invalid_typeMismatch() async {
-    var library = await buildLibrary(r'''
-const int a = 0;
-const bool b = a + 5;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @10
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @14
-              staticType: int
-        static const b @28
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            BinaryExpression
-              leftOperand: SimpleIdentifier
-                token: a @32
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: int
-              operator: + @34
-              rightOperand: IntegerLiteral
-                literal: 5 @36
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::+
-              staticInvokeType: num Function(num)
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-''');
-  }
-
-  test_const_invokeConstructor_generic_named() async {
-    var library = await buildLibrary(r'''
-class C<K, V> {
-  const C.named(K k, V v);
-}
-const V = const C<int, String>.named(1, '222');
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant K @8
-              defaultType: dynamic
-            covariant V @11
-              defaultType: dynamic
-          constructors
-            const named @26
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 25
-              nameEnd: 31
-              parameters
-                requiredPositional k @34
-                  type: K
-                requiredPositional v @39
-                  type: V
-      topLevelVariables
-        static const V @51
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C<int, String>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @55
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @61
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @62
-                    arguments
-                      NamedType
-                        name: int @63
-                        element: dart:core::<fragment>::@class::int
-                        type: int
-                      NamedType
-                        name: String @68
-                        element: dart:core::<fragment>::@class::String
-                        type: String
-                    rightBracket: > @74
-                  element: <testLibraryFragment>::@class::C
-                  type: C<int, String>
-                period: . @75
-                name: SimpleIdentifier
-                  token: named @76
-                  staticElement: ConstructorMember
-                    base: <testLibraryFragment>::@class::C::@constructor::named
-                    substitution: {K: int, V: String}
-                  staticType: null
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::C::@constructor::named
-                  substitution: {K: int, V: String}
-              argumentList: ArgumentList
-                leftParenthesis: ( @81
-                arguments
-                  IntegerLiteral
-                    literal: 1 @82
-                    staticType: int
-                  SimpleStringLiteral
-                    literal: '222' @85
-                rightParenthesis: ) @90
-              staticType: C<int, String>
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_generic_named_imported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C<K, V> {
-  const C.named(K k, V v);
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const V = const C<int, String>.named(1, '222');
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @23
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C<int, String>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @27
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @33
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @34
-                    arguments
-                      NamedType
-                        name: int @35
-                        element: dart:core::<fragment>::@class::int
-                        type: int
-                      NamedType
-                        name: String @40
-                        element: dart:core::<fragment>::@class::String
-                        type: String
-                    rightBracket: > @46
-                  element: package:test/a.dart::<fragment>::@class::C
-                  type: C<int, String>
-                period: . @47
-                name: SimpleIdentifier
-                  token: named @48
-                  staticElement: ConstructorMember
-                    base: package:test/a.dart::<fragment>::@class::C::@constructor::named
-                    substitution: {K: int, V: String}
-                  staticType: null
-                staticElement: ConstructorMember
-                  base: package:test/a.dart::<fragment>::@class::C::@constructor::named
-                  substitution: {K: int, V: String}
-              argumentList: ArgumentList
-                leftParenthesis: ( @53
-                arguments
-                  IntegerLiteral
-                    literal: 1 @54
-                    staticType: int
-                  SimpleStringLiteral
-                    literal: '222' @57
-                rightParenthesis: ) @62
-              staticType: C<int, String>
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_generic_named_imported_withPrefix() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C<K, V> {
-  const C.named(K k, V v);
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C<int, String>.named(1, '222');
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @28
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C<int, String>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @32
-              constructorName: ConstructorName
-                type: NamedType
-                  importPrefix: ImportPrefixReference
-                    name: p @38
-                    period: . @39
-                    element: <testLibraryFragment>::@prefix::p
-                  name: C @40
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @41
-                    arguments
-                      NamedType
-                        name: int @42
-                        element: dart:core::<fragment>::@class::int
-                        type: int
-                      NamedType
-                        name: String @47
-                        element: dart:core::<fragment>::@class::String
-                        type: String
-                    rightBracket: > @53
-                  element: package:test/a.dart::<fragment>::@class::C
-                  type: C<int, String>
-                period: . @54
-                name: SimpleIdentifier
-                  token: named @55
-                  staticElement: ConstructorMember
-                    base: package:test/a.dart::<fragment>::@class::C::@constructor::named
-                    substitution: {K: int, V: String}
-                  staticType: null
-                staticElement: ConstructorMember
-                  base: package:test/a.dart::<fragment>::@class::C::@constructor::named
-                  substitution: {K: int, V: String}
-              argumentList: ArgumentList
-                leftParenthesis: ( @60
-                arguments
-                  IntegerLiteral
-                    literal: 1 @61
-                    staticType: int
-                  SimpleStringLiteral
-                    literal: '222' @64
-                rightParenthesis: ) @69
-              staticType: C<int, String>
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_generic_noTypeArguments() async {
-    var library = await buildLibrary(r'''
-class C<K, V> {
-  const C();
-}
-const V = const C();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant K @8
-              defaultType: dynamic
-            covariant V @11
-              defaultType: dynamic
-          constructors
-            const @24
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static const V @37
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C<dynamic, dynamic>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @41
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @47
-                  element: <testLibraryFragment>::@class::C
-                  type: C<dynamic, dynamic>
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::C::@constructor::new
-                  substitution: {K: dynamic, V: dynamic}
-              argumentList: ArgumentList
-                leftParenthesis: ( @48
-                rightParenthesis: ) @49
-              staticType: C<dynamic, dynamic>
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C<dynamic, dynamic>
-''');
-  }
-
-  test_const_invokeConstructor_generic_noTypeArguments_inferred() async {
-    var library = await buildLibrary(r'''
-class A<T> {
-  final T t;
-  const A(this.t);
-}
-const Object a = const A(0);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          fields
-            final t @23
-              reference: <testLibraryFragment>::@class::A::@field::t
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: T
-          constructors
-            const @34
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional final this.t @41
-                  type: T
-                  field: <testLibraryFragment>::@class::A::@field::t
-          accessors
-            synthetic get t @-1
-              reference: <testLibraryFragment>::@class::A::@getter::t
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: T
-      topLevelVariables
-        static const a @60
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @64
-              constructorName: ConstructorName
-                type: NamedType
-                  name: A @70
-                  element: <testLibraryFragment>::@class::A
-                  type: A<int>
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::A::@constructor::new
-                  substitution: {T: int}
-              argumentList: ArgumentList
-                leftParenthesis: ( @71
-                arguments
-                  IntegerLiteral
-                    literal: 0 @72
-                    staticType: int
-                rightParenthesis: ) @73
-              staticType: A<int>
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_invokeConstructor_generic_unnamed() async {
-    var library = await buildLibrary(r'''
-class C<K, V> {
-  const C();
-}
-const V = const C<int, String>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant K @8
-              defaultType: dynamic
-            covariant V @11
-              defaultType: dynamic
-          constructors
-            const @24
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static const V @37
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C<int, String>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @41
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @47
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @48
-                    arguments
-                      NamedType
-                        name: int @49
-                        element: dart:core::<fragment>::@class::int
-                        type: int
-                      NamedType
-                        name: String @54
-                        element: dart:core::<fragment>::@class::String
-                        type: String
-                    rightBracket: > @60
-                  element: <testLibraryFragment>::@class::C
-                  type: C<int, String>
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::C::@constructor::new
-                  substitution: {K: int, V: String}
-              argumentList: ArgumentList
-                leftParenthesis: ( @61
-                rightParenthesis: ) @62
-              staticType: C<int, String>
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_generic_unnamed_imported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C<K, V> {
-  const C();
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const V = const C<int, String>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @23
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C<int, String>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @27
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @33
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @34
-                    arguments
-                      NamedType
-                        name: int @35
-                        element: dart:core::<fragment>::@class::int
-                        type: int
-                      NamedType
-                        name: String @40
-                        element: dart:core::<fragment>::@class::String
-                        type: String
-                    rightBracket: > @46
-                  element: package:test/a.dart::<fragment>::@class::C
-                  type: C<int, String>
-                staticElement: ConstructorMember
-                  base: package:test/a.dart::<fragment>::@class::C::@constructor::new
-                  substitution: {K: int, V: String}
-              argumentList: ArgumentList
-                leftParenthesis: ( @47
-                rightParenthesis: ) @48
-              staticType: C<int, String>
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_generic_unnamed_imported_withPrefix() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C<K, V> {
-  const C();
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C<int, String>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @28
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C<int, String>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @32
-              constructorName: ConstructorName
-                type: NamedType
-                  importPrefix: ImportPrefixReference
-                    name: p @38
-                    period: . @39
-                    element: <testLibraryFragment>::@prefix::p
-                  name: C @40
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @41
-                    arguments
-                      NamedType
-                        name: int @42
-                        element: dart:core::<fragment>::@class::int
-                        type: int
-                      NamedType
-                        name: String @47
-                        element: dart:core::<fragment>::@class::String
-                        type: String
-                    rightBracket: > @53
-                  element: package:test/a.dart::<fragment>::@class::C
-                  type: C<int, String>
-                staticElement: ConstructorMember
-                  base: package:test/a.dart::<fragment>::@class::C::@constructor::new
-                  substitution: {K: int, V: String}
-              argumentList: ArgumentList
-                leftParenthesis: ( @54
-                rightParenthesis: ) @55
-              staticType: C<int, String>
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C<int, String>
-''');
-  }
-
-  test_const_invokeConstructor_named() async {
-    var library = await buildLibrary(r'''
-class C {
-  const C.named(bool a, int b, int c, {String d, double e});
-}
-const V = const C.named(true, 1, 2, d: 'ccc', e: 3.4);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const named @20
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 19
-              nameEnd: 25
-              parameters
-                requiredPositional a @31
-                  type: bool
-                requiredPositional b @38
-                  type: int
-                requiredPositional c @45
-                  type: int
-                optionalNamed default d @56
-                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::d
-                  type: String
-                optionalNamed default e @66
-                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::e
-                  type: double
-      topLevelVariables
-        static const V @79
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @83
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @89
-                  element: <testLibraryFragment>::@class::C
-                  type: C
-                period: . @90
-                name: SimpleIdentifier
-                  token: named @91
-                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
-                  staticType: null
-                staticElement: <testLibraryFragment>::@class::C::@constructor::named
-              argumentList: ArgumentList
-                leftParenthesis: ( @96
-                arguments
-                  BooleanLiteral
-                    literal: true @97
-                    staticType: bool
-                  IntegerLiteral
-                    literal: 1 @103
-                    staticType: int
-                  IntegerLiteral
-                    literal: 2 @106
-                    staticType: int
-                  NamedExpression
-                    name: Label
-                      label: SimpleIdentifier
-                        token: d @109
-                        staticElement: <testLibraryFragment>::@class::C::@constructor::named::@parameter::d
-                        staticType: null
-                      colon: : @110
-                    expression: SimpleStringLiteral
-                      literal: 'ccc' @112
-                  NamedExpression
-                    name: Label
-                      label: SimpleIdentifier
-                        token: e @119
-                        staticElement: <testLibraryFragment>::@class::C::@constructor::named::@parameter::e
-                        staticType: null
-                      colon: : @120
-                    expression: DoubleLiteral
-                      literal: 3.4 @122
-                      staticType: double
-                rightParenthesis: ) @125
-              staticType: C
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_named_imported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {
-  const C.named();
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const V = const C.named();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @23
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @27
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @33
-                  element: package:test/a.dart::<fragment>::@class::C
-                  type: C
-                period: . @34
-                name: SimpleIdentifier
-                  token: named @35
-                  staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::named
-                  staticType: null
-                staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::named
-              argumentList: ArgumentList
-                leftParenthesis: ( @40
-                rightParenthesis: ) @41
-              staticType: C
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_named_imported_withPrefix() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {
-  const C.named();
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C.named();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @28
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @32
-              constructorName: ConstructorName
-                type: NamedType
-                  importPrefix: ImportPrefixReference
-                    name: p @38
-                    period: . @39
-                    element: <testLibraryFragment>::@prefix::p
-                  name: C @40
-                  element: package:test/a.dart::<fragment>::@class::C
-                  type: C
-                period: . @41
-                name: SimpleIdentifier
-                  token: named @42
-                  staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::named
-                  staticType: null
-                staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::named
-              argumentList: ArgumentList
-                leftParenthesis: ( @47
-                rightParenthesis: ) @48
-              staticType: C
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved() async {
-    var library = await buildLibrary(r'''
-class C {}
-const V = const C.named();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static const V @17
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @21
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @27
-                  element: <testLibraryFragment>::@class::C
-                  type: C
-                period: . @28
-                name: SimpleIdentifier
-                  token: named @29
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-              argumentList: ArgumentList
-                leftParenthesis: ( @34
-                rightParenthesis: ) @35
-              staticType: C
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved2() async {
-    var library = await buildLibrary(r'''
-const V = const C.named();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const V @6
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @10
-              constructorName: ConstructorName
-                type: NamedType
-                  importPrefix: ImportPrefixReference
-                    name: C @16
-                    period: . @17
-                    element: <null>
-                  name: named @18
-                  element: <null>
-                  type: InvalidType
-                staticElement: <null>
-              argumentList: ArgumentList
-                leftParenthesis: ( @23
-                rightParenthesis: ) @24
-              staticType: InvalidType
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved3() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C.named();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @28
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @32
-              constructorName: ConstructorName
-                type: NamedType
-                  importPrefix: ImportPrefixReference
-                    name: p @38
-                    period: . @39
-                    element: <testLibraryFragment>::@prefix::p
-                  name: C @40
-                  element: package:test/a.dart::<fragment>::@class::C
-                  type: C
-                period: . @41
-                name: SimpleIdentifier
-                  token: named @42
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-              argumentList: ArgumentList
-                leftParenthesis: ( @47
-                rightParenthesis: ) @48
-              staticType: C
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved4() async {
-    addSource('$testPackageLibPath/a.dart', '');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C.named();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @28
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @32
-              constructorName: ConstructorName
-                type: NamedType
-                  importPrefix: ImportPrefixReference
-                    name: p @38
-                    period: . @39
-                    element: <testLibraryFragment>::@prefix::p
-                  name: C @40
-                  element: <null>
-                  type: InvalidType
-                period: . @41
-                name: SimpleIdentifier
-                  token: named @42
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-              argumentList: ArgumentList
-                leftParenthesis: ( @47
-                rightParenthesis: ) @48
-              staticType: InvalidType
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved5() async {
-    var library = await buildLibrary(r'''
-const V = const p.C.named();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const V @6
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @10
-              constructorName: ConstructorName
-                type: NamedType
-                  importPrefix: ImportPrefixReference
-                    name: p @16
-                    period: . @17
-                    element: <null>
-                  name: C @18
-                  element: <null>
-                  type: InvalidType
-                period: . @19
-                name: SimpleIdentifier
-                  token: named @20
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-              argumentList: ArgumentList
-                leftParenthesis: ( @25
-                rightParenthesis: ) @26
-              staticType: InvalidType
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_const_invokeConstructor_named_unresolved6() async {
-    var library = await buildLibrary(r'''
-class C<T> {}
-const V = const C.named();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static const V @20
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C<dynamic>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @24
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @30
-                  element: <testLibraryFragment>::@class::C
-                  type: C<dynamic>
-                period: . @31
-                name: SimpleIdentifier
-                  token: named @32
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-              argumentList: ArgumentList
-                leftParenthesis: ( @37
-                rightParenthesis: ) @38
-              staticType: C<dynamic>
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C<dynamic>
-''');
-  }
-
-  test_const_invokeConstructor_unnamed() async {
-    var library = await buildLibrary(r'''
-class C {
-  const C();
-}
-const V = const C();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static const V @31
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @35
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @41
-                  element: <testLibraryFragment>::@class::C
-                  type: C
-                staticElement: <testLibraryFragment>::@class::C::@constructor::new
-              argumentList: ArgumentList
-                leftParenthesis: ( @42
-                rightParenthesis: ) @43
-              staticType: C
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_unnamed_imported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {
-  const C();
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const V = const C();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @23
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @27
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @33
-                  element: package:test/a.dart::<fragment>::@class::C
-                  type: C
-                staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::new
-              argumentList: ArgumentList
-                leftParenthesis: ( @34
-                rightParenthesis: ) @35
-              staticType: C
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_unnamed_imported_withPrefix() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {
-  const C();
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @28
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @32
-              constructorName: ConstructorName
-                type: NamedType
-                  importPrefix: ImportPrefixReference
-                    name: p @38
-                    period: . @39
-                    element: <testLibraryFragment>::@prefix::p
-                  name: C @40
-                  element: package:test/a.dart::<fragment>::@class::C
-                  type: C
-                staticElement: package:test/a.dart::<fragment>::@class::C::@constructor::new
-              argumentList: ArgumentList
-                leftParenthesis: ( @41
-                rightParenthesis: ) @42
-              staticType: C
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-''');
-  }
-
-  test_const_invokeConstructor_unnamed_unresolved() async {
-    var library = await buildLibrary(r'''
-const V = const C();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const V @6
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @10
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @16
-                  element: <null>
-                  type: InvalidType
-                staticElement: <null>
-              argumentList: ArgumentList
-                leftParenthesis: ( @17
-                rightParenthesis: ) @18
-              staticType: InvalidType
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_const_invokeConstructor_unnamed_unresolved2() async {
-    addSource('$testPackageLibPath/a.dart', '');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const V = const p.C();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @28
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @32
-              constructorName: ConstructorName
-                type: NamedType
-                  importPrefix: ImportPrefixReference
-                    name: p @38
-                    period: . @39
-                    element: <testLibraryFragment>::@prefix::p
-                  name: C @40
-                  element: <null>
-                  type: InvalidType
-                staticElement: <null>
-              argumentList: ArgumentList
-                leftParenthesis: ( @41
-                rightParenthesis: ) @42
-              staticType: InvalidType
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_const_invokeConstructor_unnamed_unresolved3() async {
-    var library = await buildLibrary(r'''
-const V = const p.C();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const V @6
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @10
-              constructorName: ConstructorName
-                type: NamedType
-                  importPrefix: ImportPrefixReference
-                    name: p @16
-                    period: . @17
-                    element: <null>
-                  name: C @18
-                  element: <null>
-                  type: InvalidType
-                staticElement: <null>
-              argumentList: ArgumentList
-                leftParenthesis: ( @19
-                rightParenthesis: ) @20
-              staticType: InvalidType
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_const_isExpression() async {
-    var library = await buildLibrary('''
-const a = 0;
-const b = a is int;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @10
-              staticType: int
-        static const b @19
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IsExpression
-              expression: SimpleIdentifier
-                token: a @23
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: int
-              isOperator: is @25
-              type: NamedType
-                name: int @28
-                element: dart:core::<fragment>::@class::int
-                type: int
-              staticType: bool
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-''');
-  }
-
-  test_const_length_ofClassConstField() async {
-    var library = await buildLibrary(r'''
-class C {
-  static const String F = '';
-}
-const int v = C.F.length;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const F @32
-              reference: <testLibraryFragment>::@class::C::@field::F
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: String
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                SimpleStringLiteral
-                  literal: '' @36
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get F @-1
-              reference: <testLibraryFragment>::@class::C::@getter::F
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: String
-      topLevelVariables
-        static const v @52
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            PropertyAccess
-              target: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: C @56
-                  staticElement: <testLibraryFragment>::@class::C
-                  staticType: null
-                period: . @57
-                identifier: SimpleIdentifier
-                  token: F @58
-                  staticElement: <testLibraryFragment>::@class::C::@getter::F
-                  staticType: String
-                staticElement: <testLibraryFragment>::@class::C::@getter::F
-                staticType: String
-              operator: . @59
-              propertyName: SimpleIdentifier
-                token: length @60
-                staticElement: dart:core::<fragment>::@class::String::@getter::length
-                staticType: int
-              staticType: int
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_length_ofClassConstField_imported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {
-  static const String F = '';
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const int v = C.F.length;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const v @27
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            PropertyAccess
-              target: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: C @31
-                  staticElement: package:test/a.dart::<fragment>::@class::C
-                  staticType: null
-                period: . @32
-                identifier: SimpleIdentifier
-                  token: F @33
-                  staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
-                  staticType: String
-                staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
-                staticType: String
-              operator: . @34
-              propertyName: SimpleIdentifier
-                token: length @35
-                staticElement: dart:core::<fragment>::@class::String::@getter::length
-                staticType: int
-              staticType: int
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_length_ofClassConstField_imported_withPrefix() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {
-  static const String F = '';
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const int v = p.C.F.length;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const v @32
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            PropertyAccess
-              target: PropertyAccess
-                target: PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: p @36
-                    staticElement: <testLibraryFragment>::@prefix::p
-                    staticType: null
-                  period: . @37
-                  identifier: SimpleIdentifier
-                    token: C @38
-                    staticElement: package:test/a.dart::<fragment>::@class::C
-                    staticType: null
-                  staticElement: package:test/a.dart::<fragment>::@class::C
-                  staticType: null
-                operator: . @39
-                propertyName: SimpleIdentifier
-                  token: F @40
-                  staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
-                  staticType: String
-                staticType: String
-              operator: . @41
-              propertyName: SimpleIdentifier
-                token: length @42
-                staticElement: dart:core::<fragment>::@class::String::@getter::length
-                staticType: int
-              staticType: int
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_length_ofStringLiteral() async {
-    var library = await buildLibrary(r'''
-const v = 'abc'.length;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PropertyAccess
-              target: SimpleStringLiteral
-                literal: 'abc' @10
-              operator: . @15
-              propertyName: SimpleIdentifier
-                token: length @16
-                staticElement: dart:core::<fragment>::@class::String::@getter::length
-                staticType: int
-              staticType: int
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_length_ofTopLevelVariable() async {
-    var library = await buildLibrary(r'''
-const String S = 'abc';
-const v = S.length;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const S @13
-          reference: <testLibraryFragment>::@topLevelVariable::S
-          enclosingElement: <testLibraryFragment>
-          type: String
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            SimpleStringLiteral
-              literal: 'abc' @17
-        static const v @30
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: S @34
-                staticElement: <testLibraryFragment>::@getter::S
-                staticType: String
-              period: . @35
-              identifier: SimpleIdentifier
-                token: length @36
-                staticElement: dart:core::<fragment>::@class::String::@getter::length
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::String::@getter::length
-              staticType: int
-      accessors
-        synthetic static get S @-1
-          reference: <testLibraryFragment>::@getter::S
-          enclosingElement: <testLibraryFragment>
-          returnType: String
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_length_ofTopLevelVariable_imported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-const String S = 'abc';
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const v = S.length;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const v @23
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: S @27
-                staticElement: package:test/a.dart::<fragment>::@getter::S
-                staticType: String
-              period: . @28
-              identifier: SimpleIdentifier
-                token: length @29
-                staticElement: dart:core::<fragment>::@class::String::@getter::length
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::String::@getter::length
-              staticType: int
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_length_ofTopLevelVariable_imported_withPrefix() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-const String S = 'abc';
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const v = p.S.length;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const v @28
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PropertyAccess
-              target: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: p @32
-                  staticElement: <testLibraryFragment>::@prefix::p
-                  staticType: null
-                period: . @33
-                identifier: SimpleIdentifier
-                  token: S @34
-                  staticElement: package:test/a.dart::<fragment>::@getter::S
-                  staticType: String
-                staticElement: package:test/a.dart::<fragment>::@getter::S
-                staticType: String
-              operator: . @35
-              propertyName: SimpleIdentifier
-                token: length @36
-                staticElement: dart:core::<fragment>::@class::String::@getter::length
-                staticType: int
-              staticType: int
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_length_staticMethod() async {
-    var library = await buildLibrary(r'''
-class C {
-  static int length() => 42;
-}
-const v = C.length;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            static length @23
-              reference: <testLibraryFragment>::@class::C::@method::length
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-      topLevelVariables
-        static const v @47
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int Function()
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: C @51
-                staticElement: <testLibraryFragment>::@class::C
-                staticType: null
-              period: . @52
-              identifier: SimpleIdentifier
-                token: length @53
-                staticElement: <testLibraryFragment>::@class::C::@method::length
-                staticType: int Function()
-              staticElement: <testLibraryFragment>::@class::C::@method::length
-              staticType: int Function()
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function()
-''');
-  }
-
-  test_const_list_if() async {
-    var library = await buildLibrary('''
-const Object x = const <int>[if (true) 1];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            ListLiteral
-              constKeyword: const @17
-              typeArguments: TypeArgumentList
-                leftBracket: < @23
-                arguments
-                  NamedType
-                    name: int @24
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @27
-              leftBracket: [ @28
-              elements
-                IfElement
-                  ifKeyword: if @29
-                  leftParenthesis: ( @32
-                  expression: BooleanLiteral
-                    literal: true @33
-                    staticType: bool
-                  rightParenthesis: ) @37
-                  thenElement: IntegerLiteral
-                    literal: 1 @39
-                    staticType: int
-              rightBracket: ] @40
-              staticType: List<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_list_if_else() async {
-    var library = await buildLibrary('''
-const Object x = const <int>[if (true) 1 else 2];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            ListLiteral
-              constKeyword: const @17
-              typeArguments: TypeArgumentList
-                leftBracket: < @23
-                arguments
-                  NamedType
-                    name: int @24
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @27
-              leftBracket: [ @28
-              elements
-                IfElement
-                  ifKeyword: if @29
-                  leftParenthesis: ( @32
-                  expression: BooleanLiteral
-                    literal: true @33
-                    staticType: bool
-                  rightParenthesis: ) @37
-                  thenElement: IntegerLiteral
-                    literal: 1 @39
-                    staticType: int
-                  elseKeyword: else @41
-                  elseElement: IntegerLiteral
-                    literal: 2 @46
-                    staticType: int
-              rightBracket: ] @47
-              staticType: List<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_list_inferredType() async {
-    // The summary needs to contain enough information so that when the constant
-    // is resynthesized, the constant value can get the type that was computed
-    // by type inference.
-    var library = await buildLibrary('''
-const Object x = const [1];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            ListLiteral
-              constKeyword: const @17
-              leftBracket: [ @23
-              elements
-                IntegerLiteral
-                  literal: 1 @24
-                  staticType: int
-              rightBracket: ] @25
-              staticType: List<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_list_spread() async {
-    var library = await buildLibrary('''
-const Object x = const <int>[...<int>[1]];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            ListLiteral
-              constKeyword: const @17
-              typeArguments: TypeArgumentList
-                leftBracket: < @23
-                arguments
-                  NamedType
-                    name: int @24
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @27
-              leftBracket: [ @28
-              elements
-                SpreadElement
-                  spreadOperator: ... @29
-                  expression: ListLiteral
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @32
-                      arguments
-                        NamedType
-                          name: int @33
-                          element: dart:core::<fragment>::@class::int
-                          type: int
-                      rightBracket: > @36
-                    leftBracket: [ @37
-                    elements
-                      IntegerLiteral
-                        literal: 1 @38
-                        staticType: int
-                    rightBracket: ] @39
-                    staticType: List<int>
-              rightBracket: ] @40
-              staticType: List<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_list_spread_null_aware() async {
-    var library = await buildLibrary('''
-const Object x = const <int>[...?<int>[1]];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            ListLiteral
-              constKeyword: const @17
-              typeArguments: TypeArgumentList
-                leftBracket: < @23
-                arguments
-                  NamedType
-                    name: int @24
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @27
-              leftBracket: [ @28
-              elements
-                SpreadElement
-                  spreadOperator: ...? @29
-                  expression: ListLiteral
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @33
-                      arguments
-                        NamedType
-                          name: int @34
-                          element: dart:core::<fragment>::@class::int
-                          type: int
-                      rightBracket: > @37
-                    leftBracket: [ @38
-                    elements
-                      IntegerLiteral
-                        literal: 1 @39
-                        staticType: int
-                    rightBracket: ] @40
-                    staticType: List<int>
-              rightBracket: ] @41
-              staticType: List<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_map_if() async {
-    var library = await buildLibrary('''
-const Object x = const <int, int>{if (true) 1: 2};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @17
-              typeArguments: TypeArgumentList
-                leftBracket: < @23
-                arguments
-                  NamedType
-                    name: int @24
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                  NamedType
-                    name: int @29
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @32
-              leftBracket: { @33
-              elements
-                IfElement
-                  ifKeyword: if @34
-                  leftParenthesis: ( @37
-                  expression: BooleanLiteral
-                    literal: true @38
-                    staticType: bool
-                  rightParenthesis: ) @42
-                  thenElement: MapLiteralEntry
-                    key: IntegerLiteral
-                      literal: 1 @44
-                      staticType: int
-                    separator: : @45
-                    value: IntegerLiteral
-                      literal: 2 @47
-                      staticType: int
-              rightBracket: } @48
-              isMap: true
-              staticType: Map<int, int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_map_inferredType() async {
-    // The summary needs to contain enough information so that when the constant
-    // is resynthesized, the constant value can get the type that was computed
-    // by type inference.
-    var library = await buildLibrary('''
-const Object x = const {1: 1.0};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @17
-              leftBracket: { @23
-              elements
-                MapLiteralEntry
-                  key: IntegerLiteral
-                    literal: 1 @24
-                    staticType: int
-                  separator: : @25
-                  value: DoubleLiteral
-                    literal: 1.0 @27
-                    staticType: double
-              rightBracket: } @30
-              isMap: true
-              staticType: Map<int, double>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_map_spread() async {
-    var library = await buildLibrary('''
-const Object x = const <int, int>{...<int, int>{1: 2}};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @17
-              typeArguments: TypeArgumentList
-                leftBracket: < @23
-                arguments
-                  NamedType
-                    name: int @24
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                  NamedType
-                    name: int @29
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @32
-              leftBracket: { @33
-              elements
-                SpreadElement
-                  spreadOperator: ... @34
-                  expression: SetOrMapLiteral
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @37
-                      arguments
-                        NamedType
-                          name: int @38
-                          element: dart:core::<fragment>::@class::int
-                          type: int
-                        NamedType
-                          name: int @43
-                          element: dart:core::<fragment>::@class::int
-                          type: int
-                      rightBracket: > @46
-                    leftBracket: { @47
-                    elements
-                      MapLiteralEntry
-                        key: IntegerLiteral
-                          literal: 1 @48
-                          staticType: int
-                        separator: : @49
-                        value: IntegerLiteral
-                          literal: 2 @51
-                          staticType: int
-                    rightBracket: } @52
-                    isMap: true
-                    staticType: Map<int, int>
-              rightBracket: } @53
-              isMap: true
-              staticType: Map<int, int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_map_spread_null_aware() async {
-    var library = await buildLibrary('''
-const Object x = const <int, int>{...?<int, int>{1: 2}};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @17
-              typeArguments: TypeArgumentList
-                leftBracket: < @23
-                arguments
-                  NamedType
-                    name: int @24
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                  NamedType
-                    name: int @29
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @32
-              leftBracket: { @33
-              elements
-                SpreadElement
-                  spreadOperator: ...? @34
-                  expression: SetOrMapLiteral
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @38
-                      arguments
-                        NamedType
-                          name: int @39
-                          element: dart:core::<fragment>::@class::int
-                          type: int
-                        NamedType
-                          name: int @44
-                          element: dart:core::<fragment>::@class::int
-                          type: int
-                      rightBracket: > @47
-                    leftBracket: { @48
-                    elements
-                      MapLiteralEntry
-                        key: IntegerLiteral
-                          literal: 1 @49
-                          staticType: int
-                        separator: : @50
-                        value: IntegerLiteral
-                          literal: 2 @52
-                          staticType: int
-                    rightBracket: } @53
-                    isMap: true
-                    staticType: Map<int, int>
-              rightBracket: } @54
-              isMap: true
-              staticType: Map<int, int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_methodInvocation() async {
-    var library = await buildLibrary(r'''
-T f<T>(T a) => a;
-const b = f<int>(0);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const b @24
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            MethodInvocation
-              methodName: SimpleIdentifier
-                token: f @28
-                staticElement: <testLibraryFragment>::@function::f
-                staticType: T Function<T>(T)
-              typeArguments: TypeArgumentList
-                leftBracket: < @29
-                arguments
-                  NamedType
-                    name: int @30
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @33
-              argumentList: ArgumentList
-                leftParenthesis: ( @34
-                arguments
-                  IntegerLiteral
-                    literal: 0 @35
-                    staticType: int
-                rightParenthesis: ) @36
-              staticInvokeType: int Function(int)
-              staticType: int
-              typeArgumentTypes
-                int
-      accessors
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-      functions
-        f @2
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @4
-              defaultType: dynamic
-          parameters
-            requiredPositional a @9
-              type: T
-          returnType: T
-''');
-  }
-
-  test_const_parameterDefaultValue_initializingFormal_functionTyped() async {
-    var library = await buildLibrary(r'''
-class C {
-  final x;
-  const C({this.x: foo});
-}
-int foo() => 42;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            const @29
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalNamed default final this.x @37
-                  reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
-                  type: dynamic
-                  constantInitializer
-                    SimpleIdentifier
-                      token: foo @40
-                      staticElement: <testLibraryFragment>::@function::foo
-                      staticType: int Function()
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-      functions
-        foo @53
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_parameterDefaultValue_initializingFormal_named() async {
-    var library = await buildLibrary(r'''
-class C {
-  final x;
-  const C({this.x: 1 + 2});
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            const @29
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalNamed default final this.x @37
-                  reference: <testLibraryFragment>::@class::C::@constructor::new::@parameter::x
-                  type: dynamic
-                  constantInitializer
-                    BinaryExpression
-                      leftOperand: IntegerLiteral
-                        literal: 1 @40
-                        staticType: int
-                      operator: + @42
-                      rightOperand: IntegerLiteral
-                        literal: 2 @44
-                        staticType: int
-                      staticElement: dart:core::<fragment>::@class::num::@method::+
-                      staticInvokeType: num Function(num)
-                      staticType: int
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_const_parameterDefaultValue_initializingFormal_positional() async {
-    var library = await buildLibrary(r'''
-class C {
-  final x;
-  const C([this.x = 1 + 2]);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            const @29
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default final this.x @37
-                  type: dynamic
-                  constantInitializer
-                    BinaryExpression
-                      leftOperand: IntegerLiteral
-                        literal: 1 @41
-                        staticType: int
-                      operator: + @43
-                      rightOperand: IntegerLiteral
-                        literal: 2 @45
-                        staticType: int
-                      staticElement: dart:core::<fragment>::@class::num::@method::+
-                      staticInvokeType: num Function(num)
-                      staticType: int
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_const_parameterDefaultValue_normal() async {
-    var library = await buildLibrary(r'''
-class C {
-  const C.positional([p = 1 + 2]);
-  const C.named({p: 1 + 2});
-  void methodPositional([p = 1 + 2]) {}
-  void methodPositionalWithoutDefault([p]) {}
-  void methodNamed({p: 1 + 2}) {}
-  void methodNamedWithoutDefault({p}) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const positional @20
-              reference: <testLibraryFragment>::@class::C::@constructor::positional
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 19
-              nameEnd: 30
-              parameters
-                optionalPositional default p @32
-                  type: dynamic
-                  constantInitializer
-                    BinaryExpression
-                      leftOperand: IntegerLiteral
-                        literal: 1 @36
-                        staticType: int
-                      operator: + @38
-                      rightOperand: IntegerLiteral
-                        literal: 2 @40
-                        staticType: int
-                      staticElement: dart:core::<fragment>::@class::num::@method::+
-                      staticInvokeType: num Function(num)
-                      staticType: int
-            const named @55
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 54
-              nameEnd: 60
-              parameters
-                optionalNamed default p @62
-                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::p
-                  type: dynamic
-                  constantInitializer
-                    BinaryExpression
-                      leftOperand: IntegerLiteral
-                        literal: 1 @65
-                        staticType: int
-                      operator: + @67
-                      rightOperand: IntegerLiteral
-                        literal: 2 @69
-                        staticType: int
-                      staticElement: dart:core::<fragment>::@class::num::@method::+
-                      staticInvokeType: num Function(num)
-                      staticType: int
-          methods
-            methodPositional @81
-              reference: <testLibraryFragment>::@class::C::@method::methodPositional
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default p @99
-                  type: dynamic
-                  constantInitializer
-                    BinaryExpression
-                      leftOperand: IntegerLiteral
-                        literal: 1 @103
-                        staticType: int
-                      operator: + @105
-                      rightOperand: IntegerLiteral
-                        literal: 2 @107
-                        staticType: int
-                      staticElement: dart:core::<fragment>::@class::num::@method::+
-                      staticInvokeType: num Function(num)
-                      staticType: int
-              returnType: void
-            methodPositionalWithoutDefault @121
-              reference: <testLibraryFragment>::@class::C::@method::methodPositionalWithoutDefault
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default p @153
-                  type: dynamic
-              returnType: void
-            methodNamed @167
-              reference: <testLibraryFragment>::@class::C::@method::methodNamed
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalNamed default p @180
-                  reference: <testLibraryFragment>::@class::C::@method::methodNamed::@parameter::p
-                  type: dynamic
-                  constantInitializer
-                    BinaryExpression
-                      leftOperand: IntegerLiteral
-                        literal: 1 @183
-                        staticType: int
-                      operator: + @185
-                      rightOperand: IntegerLiteral
-                        literal: 2 @187
-                        staticType: int
-                      staticElement: dart:core::<fragment>::@class::num::@method::+
-                      staticInvokeType: num Function(num)
-                      staticType: int
-              returnType: void
-            methodNamedWithoutDefault @201
-              reference: <testLibraryFragment>::@class::C::@method::methodNamedWithoutDefault
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalNamed default p @228
-                  reference: <testLibraryFragment>::@class::C::@method::methodNamedWithoutDefault::@parameter::p
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_const_postfixExpression_increment() async {
-    var library = await buildLibrary(r'''
-const a = 0;
-const b = a++;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @10
-              staticType: int
-        static const b @19
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PostfixExpression
-              operand: SimpleIdentifier
-                token: a @23
-                staticElement: <null>
-                staticType: null
-              operator: ++ @24
-              readElement: <testLibraryFragment>::@getter::a
-              readType: int
-              writeElement: <testLibraryFragment>::@getter::a
-              writeType: InvalidType
-              staticElement: dart:core::<fragment>::@class::num::@method::+
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_postfixExpression_nullCheck() async {
-    var library = await buildLibrary(r'''
-const int? a = 0;
-const b = a!;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @11
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int?
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @15
-              staticType: int
-        static const b @24
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PostfixExpression
-              operand: SimpleIdentifier
-                token: a @28
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: int?
-              operator: ! @29
-              staticElement: <null>
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int?
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_prefixExpression_class_unaryMinus() async {
-    var library = await buildLibrary(r'''
-const a = 0;
-const b = -a;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @10
-              staticType: int
-        static const b @19
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixExpression
-              operator: - @23
-              operand: SimpleIdentifier
-                token: a @24
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::int::@method::unary-
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_prefixExpression_extension_unaryMinus() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-extension E on Object {
-  int operator -() => 0;
-}
-const a = const Object();
-''');
-    var library = await buildLibrary('''
-import 'a.dart';
-const b = -a;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const b @23
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixExpression
-              operator: - @27
-              operand: SimpleIdentifier
-                token: a @28
-                staticElement: package:test/a.dart::<fragment>::@getter::a
-                staticType: Object
-              staticElement: package:test/a.dart::<fragment>::@extension::E::@method::unary-
-              staticType: int
-      accessors
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_prefixExpression_increment() async {
-    var library = await buildLibrary(r'''
-const a = 0;
-const b = ++a;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @10
-              staticType: int
-        static const b @19
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixExpression
-              operator: ++ @23
-              operand: SimpleIdentifier
-                token: a @25
-                staticElement: <null>
-                staticType: null
-              readElement: <testLibraryFragment>::@getter::a
-              readType: int
-              writeElement: <testLibraryFragment>::@getter::a
-              writeType: InvalidType
-              staticElement: dart:core::<fragment>::@class::num::@method::+
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  void test_const_recordLiteral() async {
-    var library = await buildLibrary('''
-const a = 0;
-const b = (a, a: a);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @10
-              staticType: int
-        static const b @19
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: (int, {int a})
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            RecordLiteral
-              leftParenthesis: ( @23
-              fields
-                SimpleIdentifier
-                  token: a @24
-                  staticElement: <testLibraryFragment>::@getter::a
-                  staticType: int
-                NamedExpression
-                  name: Label
-                    label: SimpleIdentifier
-                      token: a @27
-                      staticElement: <null>
-                      staticType: null
-                    colon: : @28
-                  expression: SimpleIdentifier
-                    token: a @30
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: int
-              rightParenthesis: ) @31
-              staticType: (int, {int a})
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: (int, {int a})
-''');
-  }
-
-  void test_const_recordLiteral_explicitConst() async {
-    var library = await buildLibrary('''
-const a = 0;
-const b = const (a, a: a);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @10
-              staticType: int
-        static const b @19
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: (int, {int a})
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            RecordLiteral
-              constKeyword: const @23
-              leftParenthesis: ( @29
-              fields
-                SimpleIdentifier
-                  token: a @30
-                  staticElement: <testLibraryFragment>::@getter::a
-                  staticType: int
-                NamedExpression
-                  name: Label
-                    label: SimpleIdentifier
-                      token: a @33
-                      staticElement: <null>
-                      staticType: null
-                    colon: : @34
-                  expression: SimpleIdentifier
-                    token: a @36
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: int
-              rightParenthesis: ) @37
-              staticType: (int, {int a})
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: (int, {int a})
-''');
-  }
-
-  test_const_reference_staticField() async {
-    var library = await buildLibrary(r'''
-class C {
-  static const int F = 42;
-}
-const V = C.F;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const F @29
-              reference: <testLibraryFragment>::@class::C::@field::F
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 42 @33
-                  staticType: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get F @-1
-              reference: <testLibraryFragment>::@class::C::@getter::F
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-      topLevelVariables
-        static const V @45
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: C @49
-                staticElement: <testLibraryFragment>::@class::C
-                staticType: null
-              period: . @50
-              identifier: SimpleIdentifier
-                token: F @51
-                staticElement: <testLibraryFragment>::@class::C::@getter::F
-                staticType: int
-              staticElement: <testLibraryFragment>::@class::C::@getter::F
-              staticType: int
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_reference_staticField_imported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {
-  static const int F = 42;
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const V = C.F;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @23
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: C @27
-                staticElement: package:test/a.dart::<fragment>::@class::C
-                staticType: null
-              period: . @28
-              identifier: SimpleIdentifier
-                token: F @29
-                staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
-                staticType: int
-              staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
-              staticType: int
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_reference_staticField_imported_withPrefix() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {
-  static const int F = 42;
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const V = p.C.F;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @28
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PropertyAccess
-              target: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: p @32
-                  staticElement: <testLibraryFragment>::@prefix::p
-                  staticType: null
-                period: . @33
-                identifier: SimpleIdentifier
-                  token: C @34
-                  staticElement: package:test/a.dart::<fragment>::@class::C
-                  staticType: null
-                staticElement: package:test/a.dart::<fragment>::@class::C
-                staticType: null
-              operator: . @35
-              propertyName: SimpleIdentifier
-                token: F @36
-                staticElement: package:test/a.dart::<fragment>::@class::C::@getter::F
-                staticType: int
-              staticType: int
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_reference_staticMethod() async {
-    var library = await buildLibrary(r'''
-class C {
-  static int m(int a, String b) => 42;
-}
-const V = C.m;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            static m @23
-              reference: <testLibraryFragment>::@class::C::@method::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional a @29
-                  type: int
-                requiredPositional b @39
-                  type: String
-              returnType: int
-      topLevelVariables
-        static const V @57
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: int Function(int, String)
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: C @61
-                staticElement: <testLibraryFragment>::@class::C
-                staticType: null
-              period: . @62
-              identifier: SimpleIdentifier
-                token: m @63
-                staticElement: <testLibraryFragment>::@class::C::@method::m
-                staticType: int Function(int, String)
-              staticElement: <testLibraryFragment>::@class::C::@method::m
-              staticType: int Function(int, String)
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function(int, String)
-''');
-  }
-
-  test_const_reference_staticMethod_imported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {
-  static int m(int a, String b) => 42;
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const V = C.m;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @23
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: int Function(int, String)
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: C @27
-                staticElement: package:test/a.dart::<fragment>::@class::C
-                staticType: null
-              period: . @28
-              identifier: SimpleIdentifier
-                token: m @29
-                staticElement: package:test/a.dart::<fragment>::@class::C::@method::m
-                staticType: int Function(int, String)
-              staticElement: package:test/a.dart::<fragment>::@class::C::@method::m
-              staticType: int Function(int, String)
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function(int, String)
-''');
-  }
-
-  test_const_reference_staticMethod_imported_withPrefix() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {
-  static int m(int a, String b) => 42;
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const V = p.C.m;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @28
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: int Function(int, String)
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PropertyAccess
-              target: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: p @32
-                  staticElement: <testLibraryFragment>::@prefix::p
-                  staticType: null
-                period: . @33
-                identifier: SimpleIdentifier
-                  token: C @34
-                  staticElement: package:test/a.dart::<fragment>::@class::C
-                  staticType: null
-                staticElement: package:test/a.dart::<fragment>::@class::C
-                staticType: null
-              operator: . @35
-              propertyName: SimpleIdentifier
-                token: m @36
-                staticElement: package:test/a.dart::<fragment>::@class::C::@method::m
-                staticType: int Function(int, String)
-              staticType: int Function(int, String)
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function(int, String)
-''');
-  }
-
-  test_const_reference_staticMethod_ofExtension() async {
-    var library = await buildLibrary('''
-class A {}
-extension E on A {
-  static void f() {}
-}
-const x = E.f;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      extensions
-        E @21
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          extendedType: A
-          methods
-            static f @44
-              reference: <testLibraryFragment>::@extension::E::@method::f
-              enclosingElement: <testLibraryFragment>::@extension::E
-              returnType: void
-      topLevelVariables
-        static const x @59
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: void Function()
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: E @63
-                staticElement: <testLibraryFragment>::@extension::E
-                staticType: null
-              period: . @64
-              identifier: SimpleIdentifier
-                token: f @65
-                staticElement: <testLibraryFragment>::@extension::E::@method::f
-                staticType: void Function()
-              staticElement: <testLibraryFragment>::@extension::E::@method::f
-              staticType: void Function()
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: void Function()
-''');
-  }
-
-  test_const_reference_topLevelFunction() async {
-    var library = await buildLibrary(r'''
-foo() {}
-const V = foo;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const V @15
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: foo @19
-              staticElement: <testLibraryFragment>::@function::foo
-              staticType: dynamic Function()
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-      functions
-        foo @0
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_const_reference_topLevelFunction_generic() async {
-    var library = await buildLibrary(r'''
-R foo<P, R>(P p) {}
-const V = foo;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const V @26
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: R Function<P, R>(P)
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: foo @30
-              staticElement: <testLibraryFragment>::@function::foo
-              staticType: R Function<P, R>(P)
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: R Function<P, R>(P)
-      functions
-        foo @2
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant P @6
-              defaultType: dynamic
-            covariant R @9
-              defaultType: dynamic
-          parameters
-            requiredPositional p @14
-              type: P
-          returnType: R
-''');
-  }
-
-  test_const_reference_topLevelFunction_imported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-foo() {}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const V = foo;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @23
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: foo @27
-              staticElement: package:test/a.dart::<fragment>::@function::foo
-              staticType: dynamic Function()
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-''');
-  }
-
-  test_const_reference_topLevelFunction_imported_withPrefix() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-foo() {}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const V = p.foo;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @28
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: p @32
-                staticElement: <testLibraryFragment>::@prefix::p
-                staticType: null
-              period: . @33
-              identifier: SimpleIdentifier
-                token: foo @34
-                staticElement: package:test/a.dart::<fragment>::@function::foo
-                staticType: dynamic Function()
-              staticElement: package:test/a.dart::<fragment>::@function::foo
-              staticType: dynamic Function()
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-''');
-  }
-
-  test_const_reference_topLevelVariable() async {
-    var library = await buildLibrary(r'''
-const A = 1;
-const B = A + 2;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const A @6
-          reference: <testLibraryFragment>::@topLevelVariable::A
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 1 @10
-              staticType: int
-        static const B @19
-          reference: <testLibraryFragment>::@topLevelVariable::B
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: SimpleIdentifier
-                token: A @23
-                staticElement: <testLibraryFragment>::@getter::A
-                staticType: int
-              operator: + @25
-              rightOperand: IntegerLiteral
-                literal: 2 @27
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::+
-              staticInvokeType: num Function(num)
-              staticType: int
-      accessors
-        synthetic static get A @-1
-          reference: <testLibraryFragment>::@getter::A
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get B @-1
-          reference: <testLibraryFragment>::@getter::B
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_reference_topLevelVariable_imported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-const A = 1;
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const B = A + 2;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const B @23
-          reference: <testLibraryFragment>::@topLevelVariable::B
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: SimpleIdentifier
-                token: A @27
-                staticElement: package:test/a.dart::<fragment>::@getter::A
-                staticType: int
-              operator: + @29
-              rightOperand: IntegerLiteral
-                literal: 2 @31
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::+
-              staticInvokeType: num Function(num)
-              staticType: int
-      accessors
-        synthetic static get B @-1
-          reference: <testLibraryFragment>::@getter::B
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_reference_topLevelVariable_imported_withPrefix() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-const A = 1;
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const B = p.A + 2;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const B @28
-          reference: <testLibraryFragment>::@topLevelVariable::B
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: p @32
-                  staticElement: <testLibraryFragment>::@prefix::p
-                  staticType: null
-                period: . @33
-                identifier: SimpleIdentifier
-                  token: A @34
-                  staticElement: package:test/a.dart::<fragment>::@getter::A
-                  staticType: int
-                staticElement: package:test/a.dart::<fragment>::@getter::A
-                staticType: int
-              operator: + @36
-              rightOperand: IntegerLiteral
-                literal: 2 @38
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::+
-              staticInvokeType: num Function(num)
-              staticType: int
-      accessors
-        synthetic static get B @-1
-          reference: <testLibraryFragment>::@getter::B
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_reference_type() async {
-    var library = await buildLibrary(r'''
-class C {}
-class D<T> {}
-enum E {a, b, c}
-typedef F(int a, String b);
-const vDynamic = dynamic;
-const vNull = Null;
-const vObject = Object;
-const vClass = C;
-const vGenericClass = D;
-const vEnum = E;
-const vFunctionTypeAlias = F;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @17
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @19
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-      enums
-        enum E @30
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant a @33
-              reference: <testLibraryFragment>::@enum::E::@field::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant b @36
-              reference: <testLibraryFragment>::@enum::E::@field::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant c @39
-              reference: <testLibraryFragment>::@enum::E::@field::c
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: a @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
-                      staticType: E
-                    SimpleIdentifier
-                      token: b @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
-                      staticType: E
-                    SimpleIdentifier
-                      token: c @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::c
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get b @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get c @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::c
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      typeAliases
-        functionTypeAliasBased F @50
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function(int, String)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @56
-                type: int
-              requiredPositional b @66
-                type: String
-            returnType: dynamic
-      topLevelVariables
-        static const vDynamic @76
-          reference: <testLibraryFragment>::@topLevelVariable::vDynamic
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: dynamic @87
-              staticElement: dynamic@-1
-              staticType: Type
-        static const vNull @102
-          reference: <testLibraryFragment>::@topLevelVariable::vNull
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: Null @110
-              staticElement: dart:core::<fragment>::@class::Null
-              staticType: Type
-        static const vObject @122
-          reference: <testLibraryFragment>::@topLevelVariable::vObject
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: Object @132
-              staticElement: dart:core::<fragment>::@class::Object
-              staticType: Type
-        static const vClass @146
-          reference: <testLibraryFragment>::@topLevelVariable::vClass
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: C @155
-              staticElement: <testLibraryFragment>::@class::C
-              staticType: Type
-        static const vGenericClass @164
-          reference: <testLibraryFragment>::@topLevelVariable::vGenericClass
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: D @180
-              staticElement: <testLibraryFragment>::@class::D
-              staticType: Type
-        static const vEnum @189
-          reference: <testLibraryFragment>::@topLevelVariable::vEnum
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: E @197
-              staticElement: <testLibraryFragment>::@enum::E
-              staticType: Type
-        static const vFunctionTypeAlias @206
-          reference: <testLibraryFragment>::@topLevelVariable::vFunctionTypeAlias
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: F @227
-              staticElement: <testLibraryFragment>::@typeAlias::F
-              staticType: Type
-      accessors
-        synthetic static get vDynamic @-1
-          reference: <testLibraryFragment>::@getter::vDynamic
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-        synthetic static get vNull @-1
-          reference: <testLibraryFragment>::@getter::vNull
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-        synthetic static get vObject @-1
-          reference: <testLibraryFragment>::@getter::vObject
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-        synthetic static get vClass @-1
-          reference: <testLibraryFragment>::@getter::vClass
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-        synthetic static get vGenericClass @-1
-          reference: <testLibraryFragment>::@getter::vGenericClass
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-        synthetic static get vEnum @-1
-          reference: <testLibraryFragment>::@getter::vEnum
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-        synthetic static get vFunctionTypeAlias @-1
-          reference: <testLibraryFragment>::@getter::vFunctionTypeAlias
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-''');
-  }
-
-  test_const_reference_type_functionType() async {
-    var library = await buildLibrary(r'''
-typedef F();
-class C {
-  final f = <F>[];
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @19
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final f @31
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: List<dynamic Function()>
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: List<dynamic Function()>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-''');
-  }
-
-  test_const_reference_type_imported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {}
-enum E {a, b, c}
-typedef F(int a, String b);
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const vClass = C;
-const vEnum = E;
-const vFunctionTypeAlias = F;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const vClass @23
-          reference: <testLibraryFragment>::@topLevelVariable::vClass
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: C @32
-              staticElement: package:test/a.dart::<fragment>::@class::C
-              staticType: Type
-        static const vEnum @41
-          reference: <testLibraryFragment>::@topLevelVariable::vEnum
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: E @49
-              staticElement: package:test/a.dart::<fragment>::@enum::E
-              staticType: Type
-        static const vFunctionTypeAlias @58
-          reference: <testLibraryFragment>::@topLevelVariable::vFunctionTypeAlias
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: F @79
-              staticElement: package:test/a.dart::<fragment>::@typeAlias::F
-              staticType: Type
-      accessors
-        synthetic static get vClass @-1
-          reference: <testLibraryFragment>::@getter::vClass
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-        synthetic static get vEnum @-1
-          reference: <testLibraryFragment>::@getter::vEnum
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-        synthetic static get vFunctionTypeAlias @-1
-          reference: <testLibraryFragment>::@getter::vFunctionTypeAlias
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-''');
-  }
-
-  test_const_reference_type_imported_withPrefix() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C {}
-enum E {a, b, c}
-typedef F(int a, String b);
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const vClass = p.C;
-const vEnum = p.E;
-const vFunctionTypeAlias = p.F;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const vClass @28
-          reference: <testLibraryFragment>::@topLevelVariable::vClass
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: p @37
-                staticElement: <testLibraryFragment>::@prefix::p
-                staticType: null
-              period: . @38
-              identifier: SimpleIdentifier
-                token: C @39
-                staticElement: package:test/a.dart::<fragment>::@class::C
-                staticType: Type
-              staticElement: package:test/a.dart::<fragment>::@class::C
-              staticType: Type
-        static const vEnum @48
-          reference: <testLibraryFragment>::@topLevelVariable::vEnum
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: p @56
-                staticElement: <testLibraryFragment>::@prefix::p
-                staticType: null
-              period: . @57
-              identifier: SimpleIdentifier
-                token: E @58
-                staticElement: package:test/a.dart::<fragment>::@enum::E
-                staticType: Type
-              staticElement: package:test/a.dart::<fragment>::@enum::E
-              staticType: Type
-        static const vFunctionTypeAlias @67
-          reference: <testLibraryFragment>::@topLevelVariable::vFunctionTypeAlias
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: p @88
-                staticElement: <testLibraryFragment>::@prefix::p
-                staticType: null
-              period: . @89
-              identifier: SimpleIdentifier
-                token: F @90
-                staticElement: package:test/a.dart::<fragment>::@typeAlias::F
-                staticType: Type
-              staticElement: package:test/a.dart::<fragment>::@typeAlias::F
-              staticType: Type
-      accessors
-        synthetic static get vClass @-1
-          reference: <testLibraryFragment>::@getter::vClass
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-        synthetic static get vEnum @-1
-          reference: <testLibraryFragment>::@getter::vEnum
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-        synthetic static get vFunctionTypeAlias @-1
-          reference: <testLibraryFragment>::@getter::vFunctionTypeAlias
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-''');
-  }
-
-  test_const_reference_type_typeParameter() async {
-    var library = await buildLibrary(r'''
-class C<T> {
-  final f = <T>[];
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          fields
-            final f @21
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: List<T>
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: List<T>
-''');
-  }
-
-  test_const_reference_unresolved_prefix0() async {
-    var library = await buildLibrary(r'''
-const V = foo;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const V @6
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: foo @10
-              staticElement: <null>
-              staticType: InvalidType
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_const_reference_unresolved_prefix1() async {
-    var library = await buildLibrary(r'''
-class C {}
-const V = C.foo;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static const V @17
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixedIdentifier
-              prefix: SimpleIdentifier
-                token: C @21
-                staticElement: <testLibraryFragment>::@class::C
-                staticType: null
-              period: . @22
-              identifier: SimpleIdentifier
-                token: foo @23
-                staticElement: <null>
-                staticType: InvalidType
-              staticElement: <null>
-              staticType: InvalidType
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_const_reference_unresolved_prefix2() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-class C {}
-''');
-    var library = await buildLibrary(r'''
-import 'foo.dart' as p;
-const V = p.C.foo;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as p @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @21
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as p @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @21
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const V @30
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PropertyAccess
-              target: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: p @34
-                  staticElement: <testLibraryFragment>::@prefix::p
-                  staticType: null
-                period: . @35
-                identifier: SimpleIdentifier
-                  token: C @36
-                  staticElement: package:test/foo.dart::<fragment>::@class::C
-                  staticType: null
-                staticElement: package:test/foo.dart::<fragment>::@class::C
-                staticType: null
-              operator: . @37
-              propertyName: SimpleIdentifier
-                token: foo @38
-                staticElement: <null>
-                staticType: InvalidType
-              staticType: InvalidType
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_const_set_if() async {
-    var library = await buildLibrary('''
-const Object x = const <int>{if (true) 1};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @17
-              typeArguments: TypeArgumentList
-                leftBracket: < @23
-                arguments
-                  NamedType
-                    name: int @24
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @27
-              leftBracket: { @28
-              elements
-                IfElement
-                  ifKeyword: if @29
-                  leftParenthesis: ( @32
-                  expression: BooleanLiteral
-                    literal: true @33
-                    staticType: bool
-                  rightParenthesis: ) @37
-                  thenElement: IntegerLiteral
-                    literal: 1 @39
-                    staticType: int
-              rightBracket: } @40
-              isMap: false
-              staticType: Set<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_set_inferredType() async {
-    // The summary needs to contain enough information so that when the constant
-    // is resynthesized, the constant value can get the type that was computed
-    // by type inference.
-    var library = await buildLibrary('''
-const Object x = const {1};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @17
-              leftBracket: { @23
-              elements
-                IntegerLiteral
-                  literal: 1 @24
-                  staticType: int
-              rightBracket: } @25
-              isMap: false
-              staticType: Set<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_set_spread() async {
-    var library = await buildLibrary('''
-const Object x = const <int>{...<int>{1}};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @17
-              typeArguments: TypeArgumentList
-                leftBracket: < @23
-                arguments
-                  NamedType
-                    name: int @24
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @27
-              leftBracket: { @28
-              elements
-                SpreadElement
-                  spreadOperator: ... @29
-                  expression: SetOrMapLiteral
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @32
-                      arguments
-                        NamedType
-                          name: int @33
-                          element: dart:core::<fragment>::@class::int
-                          type: int
-                      rightBracket: > @36
-                    leftBracket: { @37
-                    elements
-                      IntegerLiteral
-                        literal: 1 @38
-                        staticType: int
-                    rightBracket: } @39
-                    isMap: false
-                    staticType: Set<int>
-              rightBracket: } @40
-              isMap: false
-              staticType: Set<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_set_spread_null_aware() async {
-    var library = await buildLibrary('''
-const Object x = const <int>{...?<int>{1}};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @13
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Object
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @17
-              typeArguments: TypeArgumentList
-                leftBracket: < @23
-                arguments
-                  NamedType
-                    name: int @24
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @27
-              leftBracket: { @28
-              elements
-                SpreadElement
-                  spreadOperator: ...? @29
-                  expression: SetOrMapLiteral
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @33
-                      arguments
-                        NamedType
-                          name: int @34
-                          element: dart:core::<fragment>::@class::int
-                          type: int
-                      rightBracket: > @37
-                    leftBracket: { @38
-                    elements
-                      IntegerLiteral
-                        literal: 1 @39
-                        staticType: int
-                    rightBracket: } @40
-                    isMap: false
-                    staticType: Set<int>
-              rightBracket: } @41
-              isMap: false
-              staticType: Set<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Object
-''');
-  }
-
-  test_const_topLevel_binary() async {
-    var library = await buildLibrary(r'''
-const vEqual = 1 == 2;
-const vAnd = true && false;
-const vOr = false || true;
-const vBitXor = 1 ^ 2;
-const vBitAnd = 1 & 2;
-const vBitOr = 1 | 2;
-const vBitShiftLeft = 1 << 2;
-const vBitShiftRight = 1 >> 2;
-const vAdd = 1 + 2;
-const vSubtract = 1 - 2;
-const vMiltiply = 1 * 2;
-const vDivide = 1 / 2;
-const vFloorDivide = 1 ~/ 2;
-const vModulo = 1 % 2;
-const vGreater = 1 > 2;
-const vGreaterEqual = 1 >= 2;
-const vLess = 1 < 2;
-const vLessEqual = 1 <= 2;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const vEqual @6
-          reference: <testLibraryFragment>::@topLevelVariable::vEqual
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @15
-                staticType: int
-              operator: == @17
-              rightOperand: IntegerLiteral
-                literal: 2 @20
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::==
-              staticInvokeType: bool Function(Object)
-              staticType: bool
-        static const vAnd @29
-          reference: <testLibraryFragment>::@topLevelVariable::vAnd
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: BooleanLiteral
-                literal: true @36
-                staticType: bool
-              operator: && @41
-              rightOperand: BooleanLiteral
-                literal: false @44
-                staticType: bool
-              staticElement: <null>
-              staticInvokeType: null
-              staticType: bool
-        static const vOr @57
-          reference: <testLibraryFragment>::@topLevelVariable::vOr
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: BooleanLiteral
-                literal: false @63
-                staticType: bool
-              operator: || @69
-              rightOperand: BooleanLiteral
-                literal: true @72
-                staticType: bool
-              staticElement: <null>
-              staticInvokeType: null
-              staticType: bool
-        static const vBitXor @84
-          reference: <testLibraryFragment>::@topLevelVariable::vBitXor
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @94
-                staticType: int
-              operator: ^ @96
-              rightOperand: IntegerLiteral
-                literal: 2 @98
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::int::@method::^
-              staticInvokeType: int Function(int)
-              staticType: int
-        static const vBitAnd @107
-          reference: <testLibraryFragment>::@topLevelVariable::vBitAnd
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @117
-                staticType: int
-              operator: & @119
-              rightOperand: IntegerLiteral
-                literal: 2 @121
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::int::@method::&
-              staticInvokeType: int Function(int)
-              staticType: int
-        static const vBitOr @130
-          reference: <testLibraryFragment>::@topLevelVariable::vBitOr
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @139
-                staticType: int
-              operator: | @141
-              rightOperand: IntegerLiteral
-                literal: 2 @143
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::int::@method::|
-              staticInvokeType: int Function(int)
-              staticType: int
-        static const vBitShiftLeft @152
-          reference: <testLibraryFragment>::@topLevelVariable::vBitShiftLeft
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @168
-                staticType: int
-              operator: << @170
-              rightOperand: IntegerLiteral
-                literal: 2 @173
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::int::@method::<<
-              staticInvokeType: int Function(int)
-              staticType: int
-        static const vBitShiftRight @182
-          reference: <testLibraryFragment>::@topLevelVariable::vBitShiftRight
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @199
-                staticType: int
-              operator: >> @201
-              rightOperand: IntegerLiteral
-                literal: 2 @204
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::int::@method::>>
-              staticInvokeType: int Function(int)
-              staticType: int
-        static const vAdd @213
-          reference: <testLibraryFragment>::@topLevelVariable::vAdd
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @220
-                staticType: int
-              operator: + @222
-              rightOperand: IntegerLiteral
-                literal: 2 @224
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::+
-              staticInvokeType: num Function(num)
-              staticType: int
-        static const vSubtract @233
-          reference: <testLibraryFragment>::@topLevelVariable::vSubtract
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @245
-                staticType: int
-              operator: - @247
-              rightOperand: IntegerLiteral
-                literal: 2 @249
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::-
-              staticInvokeType: num Function(num)
-              staticType: int
-        static const vMiltiply @258
-          reference: <testLibraryFragment>::@topLevelVariable::vMiltiply
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @270
-                staticType: int
-              operator: * @272
-              rightOperand: IntegerLiteral
-                literal: 2 @274
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::*
-              staticInvokeType: num Function(num)
-              staticType: int
-        static const vDivide @283
-          reference: <testLibraryFragment>::@topLevelVariable::vDivide
-          enclosingElement: <testLibraryFragment>
-          type: double
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @293
-                staticType: int
-              operator: / @295
-              rightOperand: IntegerLiteral
-                literal: 2 @297
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::/
-              staticInvokeType: double Function(num)
-              staticType: double
-        static const vFloorDivide @306
-          reference: <testLibraryFragment>::@topLevelVariable::vFloorDivide
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @321
-                staticType: int
-              operator: ~/ @323
-              rightOperand: IntegerLiteral
-                literal: 2 @326
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::~/
-              staticInvokeType: int Function(num)
-              staticType: int
-        static const vModulo @335
-          reference: <testLibraryFragment>::@topLevelVariable::vModulo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @345
-                staticType: int
-              operator: % @347
-              rightOperand: IntegerLiteral
-                literal: 2 @349
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::%
-              staticInvokeType: num Function(num)
-              staticType: int
-        static const vGreater @358
-          reference: <testLibraryFragment>::@topLevelVariable::vGreater
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @369
-                staticType: int
-              operator: > @371
-              rightOperand: IntegerLiteral
-                literal: 2 @373
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::>
-              staticInvokeType: bool Function(num)
-              staticType: bool
-        static const vGreaterEqual @382
-          reference: <testLibraryFragment>::@topLevelVariable::vGreaterEqual
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @398
-                staticType: int
-              operator: >= @400
-              rightOperand: IntegerLiteral
-                literal: 2 @403
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::>=
-              staticInvokeType: bool Function(num)
-              staticType: bool
-        static const vLess @412
-          reference: <testLibraryFragment>::@topLevelVariable::vLess
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @420
-                staticType: int
-              operator: < @422
-              rightOperand: IntegerLiteral
-                literal: 2 @424
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::<
-              staticInvokeType: bool Function(num)
-              staticType: bool
-        static const vLessEqual @433
-          reference: <testLibraryFragment>::@topLevelVariable::vLessEqual
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @446
-                staticType: int
-              operator: <= @448
-              rightOperand: IntegerLiteral
-                literal: 2 @451
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::<=
-              staticInvokeType: bool Function(num)
-              staticType: bool
-      accessors
-        synthetic static get vEqual @-1
-          reference: <testLibraryFragment>::@getter::vEqual
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-        synthetic static get vAnd @-1
-          reference: <testLibraryFragment>::@getter::vAnd
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-        synthetic static get vOr @-1
-          reference: <testLibraryFragment>::@getter::vOr
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-        synthetic static get vBitXor @-1
-          reference: <testLibraryFragment>::@getter::vBitXor
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vBitAnd @-1
-          reference: <testLibraryFragment>::@getter::vBitAnd
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vBitOr @-1
-          reference: <testLibraryFragment>::@getter::vBitOr
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vBitShiftLeft @-1
-          reference: <testLibraryFragment>::@getter::vBitShiftLeft
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vBitShiftRight @-1
-          reference: <testLibraryFragment>::@getter::vBitShiftRight
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vAdd @-1
-          reference: <testLibraryFragment>::@getter::vAdd
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vSubtract @-1
-          reference: <testLibraryFragment>::@getter::vSubtract
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vMiltiply @-1
-          reference: <testLibraryFragment>::@getter::vMiltiply
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vDivide @-1
-          reference: <testLibraryFragment>::@getter::vDivide
-          enclosingElement: <testLibraryFragment>
-          returnType: double
-        synthetic static get vFloorDivide @-1
-          reference: <testLibraryFragment>::@getter::vFloorDivide
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vModulo @-1
-          reference: <testLibraryFragment>::@getter::vModulo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vGreater @-1
-          reference: <testLibraryFragment>::@getter::vGreater
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-        synthetic static get vGreaterEqual @-1
-          reference: <testLibraryFragment>::@getter::vGreaterEqual
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-        synthetic static get vLess @-1
-          reference: <testLibraryFragment>::@getter::vLess
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-        synthetic static get vLessEqual @-1
-          reference: <testLibraryFragment>::@getter::vLessEqual
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-''');
-  }
-
-  test_const_topLevel_conditional() async {
-    var library = await buildLibrary(r'''
-const vConditional = (1 == 2) ? 11 : 22;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const vConditional @6
-          reference: <testLibraryFragment>::@topLevelVariable::vConditional
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ConditionalExpression
-              condition: ParenthesizedExpression
-                leftParenthesis: ( @21
-                expression: BinaryExpression
-                  leftOperand: IntegerLiteral
-                    literal: 1 @22
-                    staticType: int
-                  operator: == @24
-                  rightOperand: IntegerLiteral
-                    literal: 2 @27
-                    staticType: int
-                  staticElement: dart:core::<fragment>::@class::num::@method::==
-                  staticInvokeType: bool Function(Object)
-                  staticType: bool
-                rightParenthesis: ) @28
-                staticType: bool
-              question: ? @30
-              thenExpression: IntegerLiteral
-                literal: 11 @32
-                staticType: int
-              colon: : @35
-              elseExpression: IntegerLiteral
-                literal: 22 @37
-                staticType: int
-              staticType: int
-      accessors
-        synthetic static get vConditional @-1
-          reference: <testLibraryFragment>::@getter::vConditional
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_topLevel_identical() async {
-    var library = await buildLibrary(r'''
-const vIdentical = (1 == 2) ? 11 : 22;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const vIdentical @6
-          reference: <testLibraryFragment>::@topLevelVariable::vIdentical
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ConditionalExpression
-              condition: ParenthesizedExpression
-                leftParenthesis: ( @19
-                expression: BinaryExpression
-                  leftOperand: IntegerLiteral
-                    literal: 1 @20
-                    staticType: int
-                  operator: == @22
-                  rightOperand: IntegerLiteral
-                    literal: 2 @25
-                    staticType: int
-                  staticElement: dart:core::<fragment>::@class::num::@method::==
-                  staticInvokeType: bool Function(Object)
-                  staticType: bool
-                rightParenthesis: ) @26
-                staticType: bool
-              question: ? @28
-              thenExpression: IntegerLiteral
-                literal: 11 @30
-                staticType: int
-              colon: : @33
-              elseExpression: IntegerLiteral
-                literal: 22 @35
-                staticType: int
-              staticType: int
-      accessors
-        synthetic static get vIdentical @-1
-          reference: <testLibraryFragment>::@getter::vIdentical
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_topLevel_ifNull() async {
-    var library = await buildLibrary(r'''
-const vIfNull = 1 ?? 2.0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const vIfNull @6
-          reference: <testLibraryFragment>::@topLevelVariable::vIfNull
-          enclosingElement: <testLibraryFragment>
-          type: num
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @16
-                staticType: int
-              operator: ?? @18
-              rightOperand: DoubleLiteral
-                literal: 2.0 @21
-                staticType: double
-              staticElement: <null>
-              staticInvokeType: null
-              staticType: num
-      accessors
-        synthetic static get vIfNull @-1
-          reference: <testLibraryFragment>::@getter::vIfNull
-          enclosingElement: <testLibraryFragment>
-          returnType: num
-''');
-  }
-
-  test_const_topLevel_literal() async {
-    var library = await buildLibrary(r'''
-const vNull = null;
-const vBoolFalse = false;
-const vBoolTrue = true;
-const vIntPositive = 1;
-const vIntNegative = -2;
-const vIntLong1 = 0x7FFFFFFFFFFFFFFF;
-const vIntLong2 = 0xFFFFFFFFFFFFFFFF;
-const vIntLong3 = 0x8000000000000000;
-const vDouble = 2.3;
-const vString = 'abc';
-const vStringConcat = 'aaa' 'bbb';
-const vStringInterpolation = 'aaa ${true} ${42} bbb';
-const vSymbol = #aaa.bbb.ccc;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const vNull @6
-          reference: <testLibraryFragment>::@topLevelVariable::vNull
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @14
-              staticType: Null
-        static const vBoolFalse @26
-          reference: <testLibraryFragment>::@topLevelVariable::vBoolFalse
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BooleanLiteral
-              literal: false @39
-              staticType: bool
-        static const vBoolTrue @52
-          reference: <testLibraryFragment>::@topLevelVariable::vBoolTrue
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BooleanLiteral
-              literal: true @64
-              staticType: bool
-        static const vIntPositive @76
-          reference: <testLibraryFragment>::@topLevelVariable::vIntPositive
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 1 @91
-              staticType: int
-        static const vIntNegative @100
-          reference: <testLibraryFragment>::@topLevelVariable::vIntNegative
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixExpression
-              operator: - @115
-              operand: IntegerLiteral
-                literal: 2 @116
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::int::@method::unary-
-              staticType: int
-        static const vIntLong1 @125
-          reference: <testLibraryFragment>::@topLevelVariable::vIntLong1
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0x7FFFFFFFFFFFFFFF @137
-              staticType: int
-        static const vIntLong2 @163
-          reference: <testLibraryFragment>::@topLevelVariable::vIntLong2
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0xFFFFFFFFFFFFFFFF @175
-              staticType: int
-        static const vIntLong3 @201
-          reference: <testLibraryFragment>::@topLevelVariable::vIntLong3
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0x8000000000000000 @213
-              staticType: int
-        static const vDouble @239
-          reference: <testLibraryFragment>::@topLevelVariable::vDouble
-          enclosingElement: <testLibraryFragment>
-          type: double
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            DoubleLiteral
-              literal: 2.3 @249
-              staticType: double
-        static const vString @260
-          reference: <testLibraryFragment>::@topLevelVariable::vString
-          enclosingElement: <testLibraryFragment>
-          type: String
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleStringLiteral
-              literal: 'abc' @270
-        static const vStringConcat @283
-          reference: <testLibraryFragment>::@topLevelVariable::vStringConcat
-          enclosingElement: <testLibraryFragment>
-          type: String
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            AdjacentStrings
-              strings
-                SimpleStringLiteral
-                  literal: 'aaa' @299
-                SimpleStringLiteral
-                  literal: 'bbb' @305
-              staticType: String
-              stringValue: aaabbb
-        static const vStringInterpolation @318
-          reference: <testLibraryFragment>::@topLevelVariable::vStringInterpolation
-          enclosingElement: <testLibraryFragment>
-          type: String
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            StringInterpolation
-              elements
-                InterpolationString
-                  contents: 'aaa  @341
-                InterpolationExpression
-                  leftBracket: ${ @346
-                  expression: BooleanLiteral
-                    literal: true @348
-                    staticType: bool
-                  rightBracket: } @352
-                InterpolationString
-                  contents:   @353
-                InterpolationExpression
-                  leftBracket: ${ @354
-                  expression: IntegerLiteral
-                    literal: 42 @356
-                    staticType: int
-                  rightBracket: } @358
-                InterpolationString
-                  contents:  bbb' @359
-              staticType: String
-              stringValue: null
-        static const vSymbol @372
-          reference: <testLibraryFragment>::@topLevelVariable::vSymbol
-          enclosingElement: <testLibraryFragment>
-          type: Symbol
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SymbolLiteral
-              poundSign: # @382
-              components
-                aaa
-                  offset: 383
-                bbb
-                  offset: 387
-                ccc
-                  offset: 391
-      accessors
-        synthetic static get vNull @-1
-          reference: <testLibraryFragment>::@getter::vNull
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get vBoolFalse @-1
-          reference: <testLibraryFragment>::@getter::vBoolFalse
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-        synthetic static get vBoolTrue @-1
-          reference: <testLibraryFragment>::@getter::vBoolTrue
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-        synthetic static get vIntPositive @-1
-          reference: <testLibraryFragment>::@getter::vIntPositive
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vIntNegative @-1
-          reference: <testLibraryFragment>::@getter::vIntNegative
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vIntLong1 @-1
-          reference: <testLibraryFragment>::@getter::vIntLong1
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vIntLong2 @-1
-          reference: <testLibraryFragment>::@getter::vIntLong2
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vIntLong3 @-1
-          reference: <testLibraryFragment>::@getter::vIntLong3
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vDouble @-1
-          reference: <testLibraryFragment>::@getter::vDouble
-          enclosingElement: <testLibraryFragment>
-          returnType: double
-        synthetic static get vString @-1
-          reference: <testLibraryFragment>::@getter::vString
-          enclosingElement: <testLibraryFragment>
-          returnType: String
-        synthetic static get vStringConcat @-1
-          reference: <testLibraryFragment>::@getter::vStringConcat
-          enclosingElement: <testLibraryFragment>
-          returnType: String
-        synthetic static get vStringInterpolation @-1
-          reference: <testLibraryFragment>::@getter::vStringInterpolation
-          enclosingElement: <testLibraryFragment>
-          returnType: String
-        synthetic static get vSymbol @-1
-          reference: <testLibraryFragment>::@getter::vSymbol
-          enclosingElement: <testLibraryFragment>
-          returnType: Symbol
-''');
-  }
-
-  test_const_topLevel_methodInvocation_questionPeriod() async {
-    var library = await buildLibrary(r'''
-const int? a = 0;
-const b = a?.toString();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @11
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int?
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @15
-              staticType: int
-        static const b @24
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: String?
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            MethodInvocation
-              target: SimpleIdentifier
-                token: a @28
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: int?
-              operator: ?. @29
-              methodName: SimpleIdentifier
-                token: toString @31
-                staticElement: dart:core::<fragment>::@class::int::@method::toString
-                staticType: String Function()
-              argumentList: ArgumentList
-                leftParenthesis: ( @39
-                rightParenthesis: ) @40
-              staticInvokeType: String Function()
-              staticType: String?
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int?
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: String?
-''');
-  }
-
-  test_const_topLevel_methodInvocation_questionPeriodPeriod() async {
-    var library = await buildLibrary(r'''
-const int? a = 0;
-const b = a?..toString();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @11
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int?
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @15
-              staticType: int
-        static const b @24
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: int?
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            CascadeExpression
-              target: SimpleIdentifier
-                token: a @28
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: int?
-              cascadeSections
-                MethodInvocation
-                  operator: ?.. @29
-                  methodName: SimpleIdentifier
-                    token: toString @32
-                    staticElement: dart:core::<fragment>::@class::int::@method::toString
-                    staticType: String Function()
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @40
-                    rightParenthesis: ) @41
-                  staticInvokeType: String Function()
-                  staticType: String
-              staticType: int?
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int?
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: int?
-''');
-  }
-
-  test_const_topLevel_nullAware_propertyAccess() async {
-    var library = await buildLibrary(r'''
-const String? a = '';
-
-const List<int?> b = [
-  a?.length,
-];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @14
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: String?
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            SimpleStringLiteral
-              literal: '' @18
-        static const b @40
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: List<int?>
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            ListLiteral
-              leftBracket: [ @44
-              elements
-                PropertyAccess
-                  target: SimpleIdentifier
-                    token: a @48
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: String?
-                  operator: ?. @49
-                  propertyName: SimpleIdentifier
-                    token: length @51
-                    staticElement: dart:core::<fragment>::@class::String::@getter::length
-                    staticType: int
-                  staticType: int?
-              rightBracket: ] @59
-              staticType: List<int?>
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: String?
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: List<int?>
-''');
-  }
-
-  test_const_topLevel_parenthesis() async {
-    var library = await buildLibrary(r'''
-const int v1 = (1 + 2) * 3;
-const int v2 = -(1 + 2);
-const int v3 = ('aaa' + 'bbb').length;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v1 @10
-          reference: <testLibraryFragment>::@topLevelVariable::v1
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            BinaryExpression
-              leftOperand: ParenthesizedExpression
-                leftParenthesis: ( @15
-                expression: BinaryExpression
-                  leftOperand: IntegerLiteral
-                    literal: 1 @16
-                    staticType: int
-                  operator: + @18
-                  rightOperand: IntegerLiteral
-                    literal: 2 @20
-                    staticType: int
-                  staticElement: dart:core::<fragment>::@class::num::@method::+
-                  staticInvokeType: num Function(num)
-                  staticType: int
-                rightParenthesis: ) @21
-                staticType: int
-              operator: * @23
-              rightOperand: IntegerLiteral
-                literal: 3 @25
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::*
-              staticInvokeType: num Function(num)
-              staticType: int
-        static const v2 @38
-          reference: <testLibraryFragment>::@topLevelVariable::v2
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            PrefixExpression
-              operator: - @43
-              operand: ParenthesizedExpression
-                leftParenthesis: ( @44
-                expression: BinaryExpression
-                  leftOperand: IntegerLiteral
-                    literal: 1 @45
-                    staticType: int
-                  operator: + @47
-                  rightOperand: IntegerLiteral
-                    literal: 2 @49
-                    staticType: int
-                  staticElement: dart:core::<fragment>::@class::num::@method::+
-                  staticInvokeType: num Function(num)
-                  staticType: int
-                rightParenthesis: ) @50
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::int::@method::unary-
-              staticType: int
-        static const v3 @63
-          reference: <testLibraryFragment>::@topLevelVariable::v3
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            PropertyAccess
-              target: ParenthesizedExpression
-                leftParenthesis: ( @68
-                expression: BinaryExpression
-                  leftOperand: SimpleStringLiteral
-                    literal: 'aaa' @69
-                  operator: + @75
-                  rightOperand: SimpleStringLiteral
-                    literal: 'bbb' @77
-                  staticElement: dart:core::<fragment>::@class::String::@method::+
-                  staticInvokeType: String Function(String)
-                  staticType: String
-                rightParenthesis: ) @82
-                staticType: String
-              operator: . @83
-              propertyName: SimpleIdentifier
-                token: length @84
-                staticElement: dart:core::<fragment>::@class::String::@getter::length
-                staticType: int
-              staticType: int
-      accessors
-        synthetic static get v1 @-1
-          reference: <testLibraryFragment>::@getter::v1
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get v2 @-1
-          reference: <testLibraryFragment>::@getter::v2
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get v3 @-1
-          reference: <testLibraryFragment>::@getter::v3
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_topLevel_prefix() async {
-    var library = await buildLibrary(r'''
-const vNotEqual = 1 != 2;
-const vNot = !true;
-const vNegate = -1;
-const vComplement = ~1;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const vNotEqual @6
-          reference: <testLibraryFragment>::@topLevelVariable::vNotEqual
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            BinaryExpression
-              leftOperand: IntegerLiteral
-                literal: 1 @18
-                staticType: int
-              operator: != @20
-              rightOperand: IntegerLiteral
-                literal: 2 @23
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::==
-              staticInvokeType: bool Function(Object)
-              staticType: bool
-        static const vNot @32
-          reference: <testLibraryFragment>::@topLevelVariable::vNot
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixExpression
-              operator: ! @39
-              operand: BooleanLiteral
-                literal: true @40
-                staticType: bool
-              staticElement: <null>
-              staticType: bool
-        static const vNegate @52
-          reference: <testLibraryFragment>::@topLevelVariable::vNegate
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixExpression
-              operator: - @62
-              operand: IntegerLiteral
-                literal: 1 @63
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::int::@method::unary-
-              staticType: int
-        static const vComplement @72
-          reference: <testLibraryFragment>::@topLevelVariable::vComplement
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            PrefixExpression
-              operator: ~ @86
-              operand: IntegerLiteral
-                literal: 1 @87
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::int::@method::~
-              staticType: int
-      accessors
-        synthetic static get vNotEqual @-1
-          reference: <testLibraryFragment>::@getter::vNotEqual
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-        synthetic static get vNot @-1
-          reference: <testLibraryFragment>::@getter::vNot
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-        synthetic static get vNegate @-1
-          reference: <testLibraryFragment>::@getter::vNegate
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get vComplement @-1
-          reference: <testLibraryFragment>::@getter::vComplement
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_const_topLevel_super() async {
-    var library = await buildLibrary(r'''
-const vSuper = super;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const vSuper @6
-          reference: <testLibraryFragment>::@topLevelVariable::vSuper
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SuperExpression
-              superKeyword: super @15
-              staticType: InvalidType
-      accessors
-        synthetic static get vSuper @-1
-          reference: <testLibraryFragment>::@getter::vSuper
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_const_topLevel_this() async {
-    var library = await buildLibrary(r'''
-const vThis = this;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const vThis @6
-          reference: <testLibraryFragment>::@topLevelVariable::vThis
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ThisExpression
-              thisKeyword: this @14
-              staticType: dynamic
-      accessors
-        synthetic static get vThis @-1
-          reference: <testLibraryFragment>::@getter::vThis
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_const_topLevel_throw() async {
-    var library = await buildLibrary(r'''
-const c = throw 42;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const c @6
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: Never
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ThrowExpression
-              throwKeyword: throw @10
-              expression: IntegerLiteral
-                literal: 42 @16
-                staticType: int
-              staticType: Never
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: Never
-''');
-  }
-
-  test_const_topLevel_typedList() async {
-    var library = await buildLibrary(r'''
-const vNull = const <Null>[];
-const vDynamic = const <dynamic>[1, 2, 3];
-const vInterfaceNoTypeParameters = const <int>[1, 2, 3];
-const vInterfaceNoTypeArguments = const <List>[];
-const vInterfaceWithTypeArguments = const <List<String>>[];
-const vInterfaceWithTypeArguments2 = const <Map<int, List<String>>>[];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const vNull @6
-          reference: <testLibraryFragment>::@topLevelVariable::vNull
-          enclosingElement: <testLibraryFragment>
-          type: List<Null>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ListLiteral
-              constKeyword: const @14
-              typeArguments: TypeArgumentList
-                leftBracket: < @20
-                arguments
-                  NamedType
-                    name: Null @21
-                    element: dart:core::<fragment>::@class::Null
-                    type: Null
-                rightBracket: > @25
-              leftBracket: [ @26
-              rightBracket: ] @27
-              staticType: List<Null>
-        static const vDynamic @36
-          reference: <testLibraryFragment>::@topLevelVariable::vDynamic
-          enclosingElement: <testLibraryFragment>
-          type: List<dynamic>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ListLiteral
-              constKeyword: const @47
-              typeArguments: TypeArgumentList
-                leftBracket: < @53
-                arguments
-                  NamedType
-                    name: dynamic @54
-                    element: dynamic@-1
-                    type: dynamic
-                rightBracket: > @61
-              leftBracket: [ @62
-              elements
-                IntegerLiteral
-                  literal: 1 @63
-                  staticType: int
-                IntegerLiteral
-                  literal: 2 @66
-                  staticType: int
-                IntegerLiteral
-                  literal: 3 @69
-                  staticType: int
-              rightBracket: ] @70
-              staticType: List<dynamic>
-        static const vInterfaceNoTypeParameters @79
-          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceNoTypeParameters
-          enclosingElement: <testLibraryFragment>
-          type: List<int>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ListLiteral
-              constKeyword: const @108
-              typeArguments: TypeArgumentList
-                leftBracket: < @114
-                arguments
-                  NamedType
-                    name: int @115
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @118
-              leftBracket: [ @119
-              elements
-                IntegerLiteral
-                  literal: 1 @120
-                  staticType: int
-                IntegerLiteral
-                  literal: 2 @123
-                  staticType: int
-                IntegerLiteral
-                  literal: 3 @126
-                  staticType: int
-              rightBracket: ] @127
-              staticType: List<int>
-        static const vInterfaceNoTypeArguments @136
-          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceNoTypeArguments
-          enclosingElement: <testLibraryFragment>
-          type: List<List<dynamic>>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ListLiteral
-              constKeyword: const @164
-              typeArguments: TypeArgumentList
-                leftBracket: < @170
-                arguments
-                  NamedType
-                    name: List @171
-                    element: dart:core::<fragment>::@class::List
-                    type: List<dynamic>
-                rightBracket: > @175
-              leftBracket: [ @176
-              rightBracket: ] @177
-              staticType: List<List<dynamic>>
-        static const vInterfaceWithTypeArguments @186
-          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceWithTypeArguments
-          enclosingElement: <testLibraryFragment>
-          type: List<List<String>>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ListLiteral
-              constKeyword: const @216
-              typeArguments: TypeArgumentList
-                leftBracket: < @222
-                arguments
-                  NamedType
-                    name: List @223
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @227
-                      arguments
-                        NamedType
-                          name: String @228
-                          element: dart:core::<fragment>::@class::String
-                          type: String
-                      rightBracket: > @234
-                    element: dart:core::<fragment>::@class::List
-                    type: List<String>
-                rightBracket: > @235
-              leftBracket: [ @236
-              rightBracket: ] @237
-              staticType: List<List<String>>
-        static const vInterfaceWithTypeArguments2 @246
-          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceWithTypeArguments2
-          enclosingElement: <testLibraryFragment>
-          type: List<Map<int, List<String>>>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ListLiteral
-              constKeyword: const @277
-              typeArguments: TypeArgumentList
-                leftBracket: < @283
-                arguments
-                  NamedType
-                    name: Map @284
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @287
-                      arguments
-                        NamedType
-                          name: int @288
-                          element: dart:core::<fragment>::@class::int
-                          type: int
-                        NamedType
-                          name: List @293
-                          typeArguments: TypeArgumentList
-                            leftBracket: < @297
-                            arguments
-                              NamedType
-                                name: String @298
-                                element: dart:core::<fragment>::@class::String
-                                type: String
-                            rightBracket: > @304
-                          element: dart:core::<fragment>::@class::List
-                          type: List<String>
-                      rightBracket: > @305
-                    element: dart:core::<fragment>::@class::Map
-                    type: Map<int, List<String>>
-                rightBracket: > @306
-              leftBracket: [ @307
-              rightBracket: ] @308
-              staticType: List<Map<int, List<String>>>
-      accessors
-        synthetic static get vNull @-1
-          reference: <testLibraryFragment>::@getter::vNull
-          enclosingElement: <testLibraryFragment>
-          returnType: List<Null>
-        synthetic static get vDynamic @-1
-          reference: <testLibraryFragment>::@getter::vDynamic
-          enclosingElement: <testLibraryFragment>
-          returnType: List<dynamic>
-        synthetic static get vInterfaceNoTypeParameters @-1
-          reference: <testLibraryFragment>::@getter::vInterfaceNoTypeParameters
-          enclosingElement: <testLibraryFragment>
-          returnType: List<int>
-        synthetic static get vInterfaceNoTypeArguments @-1
-          reference: <testLibraryFragment>::@getter::vInterfaceNoTypeArguments
-          enclosingElement: <testLibraryFragment>
-          returnType: List<List<dynamic>>
-        synthetic static get vInterfaceWithTypeArguments @-1
-          reference: <testLibraryFragment>::@getter::vInterfaceWithTypeArguments
-          enclosingElement: <testLibraryFragment>
-          returnType: List<List<String>>
-        synthetic static get vInterfaceWithTypeArguments2 @-1
-          reference: <testLibraryFragment>::@getter::vInterfaceWithTypeArguments2
-          enclosingElement: <testLibraryFragment>
-          returnType: List<Map<int, List<String>>>
-''');
-  }
-
-  test_const_topLevel_typedList_imported() async {
-    addSource('$testPackageLibPath/a.dart', 'class C {}');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-const v = const <C>[];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const v @23
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: List<C>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ListLiteral
-              constKeyword: const @27
-              typeArguments: TypeArgumentList
-                leftBracket: < @33
-                arguments
-                  NamedType
-                    name: C @34
-                    element: package:test/a.dart::<fragment>::@class::C
-                    type: C
-                rightBracket: > @35
-              leftBracket: [ @36
-              rightBracket: ] @37
-              staticType: List<C>
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: List<C>
-''');
-  }
-
-  test_const_topLevel_typedList_importedWithPrefix() async {
-    addSource('$testPackageLibPath/a.dart', 'class C {}');
-    var library = await buildLibrary(r'''
-import 'a.dart' as p;
-const v = const <p.C>[];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as p @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @19
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as p @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @19
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const v @28
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: List<C>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ListLiteral
-              constKeyword: const @32
-              typeArguments: TypeArgumentList
-                leftBracket: < @38
-                arguments
-                  NamedType
-                    importPrefix: ImportPrefixReference
-                      name: p @39
-                      period: . @40
-                      element: <testLibraryFragment>::@prefix::p
-                    name: C @41
-                    element: package:test/a.dart::<fragment>::@class::C
-                    type: C
-                rightBracket: > @42
-              leftBracket: [ @43
-              rightBracket: ] @44
-              staticType: List<C>
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: List<C>
-''');
-  }
-
-  test_const_topLevel_typedList_typedefArgument() async {
-    var library = await buildLibrary(r'''
-typedef int F(String id);
-const v = const <F>[];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @12
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: int Function(String)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional id @21
-                type: String
-            returnType: int
-      topLevelVariables
-        static const v @32
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: List<int Function(String)>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ListLiteral
-              constKeyword: const @36
-              typeArguments: TypeArgumentList
-                leftBracket: < @42
-                arguments
-                  NamedType
-                    name: F @43
-                    element: <testLibraryFragment>::@typeAlias::F
-                    type: int Function(String)
-                      alias: <testLibraryFragment>::@typeAlias::F
-                rightBracket: > @44
-              leftBracket: [ @45
-              rightBracket: ] @46
-              staticType: List<int Function(String)>
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: List<int Function(String)>
-''');
-  }
-
-  test_const_topLevel_typedMap() async {
-    var library = await buildLibrary(r'''
-const vDynamic1 = const <dynamic, int>{};
-const vDynamic2 = const <int, dynamic>{};
-const vInterface = const <int, String>{};
-const vInterfaceWithTypeArguments = const <int, List<String>>{};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const vDynamic1 @6
-          reference: <testLibraryFragment>::@topLevelVariable::vDynamic1
-          enclosingElement: <testLibraryFragment>
-          type: Map<dynamic, int>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @18
-              typeArguments: TypeArgumentList
-                leftBracket: < @24
-                arguments
-                  NamedType
-                    name: dynamic @25
-                    element: dynamic@-1
-                    type: dynamic
-                  NamedType
-                    name: int @34
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @37
-              leftBracket: { @38
-              rightBracket: } @39
-              isMap: true
-              staticType: Map<dynamic, int>
-        static const vDynamic2 @48
-          reference: <testLibraryFragment>::@topLevelVariable::vDynamic2
-          enclosingElement: <testLibraryFragment>
-          type: Map<int, dynamic>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @60
-              typeArguments: TypeArgumentList
-                leftBracket: < @66
-                arguments
-                  NamedType
-                    name: int @67
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                  NamedType
-                    name: dynamic @72
-                    element: dynamic@-1
-                    type: dynamic
-                rightBracket: > @79
-              leftBracket: { @80
-              rightBracket: } @81
-              isMap: true
-              staticType: Map<int, dynamic>
-        static const vInterface @90
-          reference: <testLibraryFragment>::@topLevelVariable::vInterface
-          enclosingElement: <testLibraryFragment>
-          type: Map<int, String>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @103
-              typeArguments: TypeArgumentList
-                leftBracket: < @109
-                arguments
-                  NamedType
-                    name: int @110
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                  NamedType
-                    name: String @115
-                    element: dart:core::<fragment>::@class::String
-                    type: String
-                rightBracket: > @121
-              leftBracket: { @122
-              rightBracket: } @123
-              isMap: true
-              staticType: Map<int, String>
-        static const vInterfaceWithTypeArguments @132
-          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceWithTypeArguments
-          enclosingElement: <testLibraryFragment>
-          type: Map<int, List<String>>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @162
-              typeArguments: TypeArgumentList
-                leftBracket: < @168
-                arguments
-                  NamedType
-                    name: int @169
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                  NamedType
-                    name: List @174
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @178
-                      arguments
-                        NamedType
-                          name: String @179
-                          element: dart:core::<fragment>::@class::String
-                          type: String
-                      rightBracket: > @185
-                    element: dart:core::<fragment>::@class::List
-                    type: List<String>
-                rightBracket: > @186
-              leftBracket: { @187
-              rightBracket: } @188
-              isMap: true
-              staticType: Map<int, List<String>>
-      accessors
-        synthetic static get vDynamic1 @-1
-          reference: <testLibraryFragment>::@getter::vDynamic1
-          enclosingElement: <testLibraryFragment>
-          returnType: Map<dynamic, int>
-        synthetic static get vDynamic2 @-1
-          reference: <testLibraryFragment>::@getter::vDynamic2
-          enclosingElement: <testLibraryFragment>
-          returnType: Map<int, dynamic>
-        synthetic static get vInterface @-1
-          reference: <testLibraryFragment>::@getter::vInterface
-          enclosingElement: <testLibraryFragment>
-          returnType: Map<int, String>
-        synthetic static get vInterfaceWithTypeArguments @-1
-          reference: <testLibraryFragment>::@getter::vInterfaceWithTypeArguments
-          enclosingElement: <testLibraryFragment>
-          returnType: Map<int, List<String>>
-''');
-  }
-
-  test_const_topLevel_typedSet() async {
-    var library = await buildLibrary(r'''
-const vDynamic1 = const <dynamic>{};
-const vInterface = const <int>{};
-const vInterfaceWithTypeArguments = const <List<String>>{};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const vDynamic1 @6
-          reference: <testLibraryFragment>::@topLevelVariable::vDynamic1
-          enclosingElement: <testLibraryFragment>
-          type: Set<dynamic>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @18
-              typeArguments: TypeArgumentList
-                leftBracket: < @24
-                arguments
-                  NamedType
-                    name: dynamic @25
-                    element: dynamic@-1
-                    type: dynamic
-                rightBracket: > @32
-              leftBracket: { @33
-              rightBracket: } @34
-              isMap: false
-              staticType: Set<dynamic>
-        static const vInterface @43
-          reference: <testLibraryFragment>::@topLevelVariable::vInterface
-          enclosingElement: <testLibraryFragment>
-          type: Set<int>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @56
-              typeArguments: TypeArgumentList
-                leftBracket: < @62
-                arguments
-                  NamedType
-                    name: int @63
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @66
-              leftBracket: { @67
-              rightBracket: } @68
-              isMap: false
-              staticType: Set<int>
-        static const vInterfaceWithTypeArguments @77
-          reference: <testLibraryFragment>::@topLevelVariable::vInterfaceWithTypeArguments
-          enclosingElement: <testLibraryFragment>
-          type: Set<List<String>>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @107
-              typeArguments: TypeArgumentList
-                leftBracket: < @113
-                arguments
-                  NamedType
-                    name: List @114
-                    typeArguments: TypeArgumentList
-                      leftBracket: < @118
-                      arguments
-                        NamedType
-                          name: String @119
-                          element: dart:core::<fragment>::@class::String
-                          type: String
-                      rightBracket: > @125
-                    element: dart:core::<fragment>::@class::List
-                    type: List<String>
-                rightBracket: > @126
-              leftBracket: { @127
-              rightBracket: } @128
-              isMap: false
-              staticType: Set<List<String>>
-      accessors
-        synthetic static get vDynamic1 @-1
-          reference: <testLibraryFragment>::@getter::vDynamic1
-          enclosingElement: <testLibraryFragment>
-          returnType: Set<dynamic>
-        synthetic static get vInterface @-1
-          reference: <testLibraryFragment>::@getter::vInterface
-          enclosingElement: <testLibraryFragment>
-          returnType: Set<int>
-        synthetic static get vInterfaceWithTypeArguments @-1
-          reference: <testLibraryFragment>::@getter::vInterfaceWithTypeArguments
-          enclosingElement: <testLibraryFragment>
-          returnType: Set<List<String>>
-''');
-  }
-
-  test_const_topLevel_untypedList() async {
-    var library = await buildLibrary(r'''
-const v = const [1, 2, 3];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: List<int>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            ListLiteral
-              constKeyword: const @10
-              leftBracket: [ @16
-              elements
-                IntegerLiteral
-                  literal: 1 @17
-                  staticType: int
-                IntegerLiteral
-                  literal: 2 @20
-                  staticType: int
-                IntegerLiteral
-                  literal: 3 @23
-                  staticType: int
-              rightBracket: ] @24
-              staticType: List<int>
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: List<int>
-''');
-  }
-
-  test_const_topLevel_untypedMap() async {
-    var library = await buildLibrary(r'''
-const v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: Map<int, String>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @10
-              leftBracket: { @16
-              elements
-                MapLiteralEntry
-                  key: IntegerLiteral
-                    literal: 0 @17
-                    staticType: int
-                  separator: : @18
-                  value: SimpleStringLiteral
-                    literal: 'aaa' @20
-                MapLiteralEntry
-                  key: IntegerLiteral
-                    literal: 1 @27
-                    staticType: int
-                  separator: : @28
-                  value: SimpleStringLiteral
-                    literal: 'bbb' @30
-                MapLiteralEntry
-                  key: IntegerLiteral
-                    literal: 2 @37
-                    staticType: int
-                  separator: : @38
-                  value: SimpleStringLiteral
-                    literal: 'ccc' @40
-              rightBracket: } @45
-              isMap: true
-              staticType: Map<int, String>
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: Map<int, String>
-''');
-  }
-
-  test_const_topLevel_untypedSet() async {
-    var library = await buildLibrary(r'''
-const v = const {0, 1, 2};
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: Set<int>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SetOrMapLiteral
-              constKeyword: const @10
-              leftBracket: { @16
-              elements
-                IntegerLiteral
-                  literal: 0 @17
-                  staticType: int
-                IntegerLiteral
-                  literal: 1 @20
-                  staticType: int
-                IntegerLiteral
-                  literal: 2 @23
-                  staticType: int
-              rightBracket: } @24
-              isMap: false
-              staticType: Set<int>
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: Set<int>
-''');
-  }
-
-  test_const_typeLiteral() async {
-    var library = await buildLibrary(r'''
-const v = List<int>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            TypeLiteral
-              type: NamedType
-                name: List @10
-                typeArguments: TypeArgumentList
-                  leftBracket: < @14
-                  arguments
-                    NamedType
-                      name: int @15
-                      element: dart:core::<fragment>::@class::int
-                      type: int
-                  rightBracket: > @18
-                element: dart:core::<fragment>::@class::List
-                type: List<int>
-              staticType: Type
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-''');
-  }
-
-  test_constExpr_pushReference_enum_field() async {
-    var library = await buildLibrary('''
-enum E {a, b, c}
-final vValue = E.a;
-final vValues = E.values;
-final vIndex = E.a.index;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant a @8
-              reference: <testLibraryFragment>::@enum::E::@field::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant b @11
-              reference: <testLibraryFragment>::@enum::E::@field::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant c @14
-              reference: <testLibraryFragment>::@enum::E::@field::c
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: a @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
-                      staticType: E
-                    SimpleIdentifier
-                      token: b @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
-                      staticType: E
-                    SimpleIdentifier
-                      token: c @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::c
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get b @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get c @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::c
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      topLevelVariables
-        static final vValue @23
-          reference: <testLibraryFragment>::@topLevelVariable::vValue
-          enclosingElement: <testLibraryFragment>
-          type: E
-          shouldUseTypeForInitializerInference: false
-        static final vValues @43
-          reference: <testLibraryFragment>::@topLevelVariable::vValues
-          enclosingElement: <testLibraryFragment>
-          type: List<E>
-          shouldUseTypeForInitializerInference: false
-        static final vIndex @69
-          reference: <testLibraryFragment>::@topLevelVariable::vIndex
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get vValue @-1
-          reference: <testLibraryFragment>::@getter::vValue
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static get vValues @-1
-          reference: <testLibraryFragment>::@getter::vValues
-          enclosingElement: <testLibraryFragment>
-          returnType: List<E>
-        synthetic static get vIndex @-1
-          reference: <testLibraryFragment>::@getter::vIndex
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_constExpr_pushReference_enum_method() async {
-    var library = await buildLibrary('''
-enum E {a}
-final vToString = E.a.toString();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant a @8
-              reference: <testLibraryFragment>::@enum::E::@field::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: a @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      topLevelVariables
-        static final vToString @17
-          reference: <testLibraryFragment>::@topLevelVariable::vToString
-          enclosingElement: <testLibraryFragment>
-          type: String
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get vToString @-1
-          reference: <testLibraryFragment>::@getter::vToString
-          enclosingElement: <testLibraryFragment>
-          returnType: String
-''');
-  }
-
-  test_constExpr_pushReference_field_simpleIdentifier() async {
-    var library = await buildLibrary('''
-class C {
-  static const a = b;
-  static const b = null;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const a @25
-              reference: <testLibraryFragment>::@class::C::@field::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                SimpleIdentifier
-                  token: b @29
-                  staticElement: <testLibraryFragment>::@class::C::@getter::b
-                  staticType: dynamic
-            static const b @47
-              reference: <testLibraryFragment>::@class::C::@field::b
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                NullLiteral
-                  literal: null @51
-                  staticType: Null
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@class::C::@getter::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic static get b @-1
-              reference: <testLibraryFragment>::@class::C::@getter::b
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_constExpr_pushReference_staticMethod_simpleIdentifier() async {
-    var library = await buildLibrary('''
-class C {
-  static const a = m;
-  static m() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const a @25
-              reference: <testLibraryFragment>::@class::C::@field::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic Function()
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                SimpleIdentifier
-                  token: m @29
-                  staticElement: <testLibraryFragment>::@class::C::@method::m
-                  staticType: dynamic Function()
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@class::C::@getter::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic Function()
-          methods
-            static m @41
-              reference: <testLibraryFragment>::@class::C::@method::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_defaultValue_eliminateTypeParameters() async {
-    var library = await buildLibrary('''
-class A<T> {
-  const X({List<T> a = const []});
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            abstract X @21
-              reference: <testLibraryFragment>::@class::A::@method::X
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                optionalNamed default a @32
-                  reference: <testLibraryFragment>::@class::A::@method::X::@parameter::a
-                  type: List<T>
-                  constantInitializer
-                    ListLiteral
-                      constKeyword: const @36
-                      leftBracket: [ @42
-                      rightBracket: ] @43
-                      staticType: List<Never>
-              returnType: dynamic
-''');
-  }
-
-  test_defaultValue_genericFunction() async {
-    var library = await buildLibrary('''
-typedef void F<T>(T v);
-
-void defaultF<T>(T v) {}
-
-class X {
-  final F f;
-  const X({this.f: defaultF});
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class X @57
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          fields
-            final f @71
-              reference: <testLibraryFragment>::@class::X::@field::f
-              enclosingElement: <testLibraryFragment>::@class::X
-              type: void Function(dynamic)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    dynamic
-          constructors
-            const @82
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-              parameters
-                optionalNamed default final this.f @90
-                  reference: <testLibraryFragment>::@class::X::@constructor::new::@parameter::f
-                  type: void Function(dynamic)
-                    alias: <testLibraryFragment>::@typeAlias::F
-                      typeArguments
-                        dynamic
-                  constantInitializer
-                    FunctionReference
-                      function: SimpleIdentifier
-                        token: defaultF @93
-                        staticElement: <testLibraryFragment>::@function::defaultF
-                        staticType: void Function<T>(T)
-                      staticType: void Function(dynamic)
-                      typeArgumentTypes
-                        dynamic
-                  field: <testLibraryFragment>::@class::X::@field::f
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::X::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::X
-              returnType: void Function(dynamic)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    dynamic
-      typeAliases
-        functionTypeAliasBased F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @15
-              defaultType: dynamic
-          aliasedType: void Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional v @20
-                type: T
-            returnType: void
-      functions
-        defaultF @30
-          reference: <testLibraryFragment>::@function::defaultF
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @39
-              defaultType: dynamic
-          parameters
-            requiredPositional v @44
-              type: T
-          returnType: void
-''');
-  }
-
-  test_defaultValue_genericFunctionType() async {
-    var library = await buildLibrary('''
-class A<T> {
-  const A();
-}
-class B {
-  void foo({a: const A<Function()>()}) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @34
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-          methods
-            foo @45
-              reference: <testLibraryFragment>::@class::B::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                optionalNamed default a @50
-                  reference: <testLibraryFragment>::@class::B::@method::foo::@parameter::a
-                  type: dynamic
-                  constantInitializer
-                    InstanceCreationExpression
-                      keyword: const @53
-                      constructorName: ConstructorName
-                        type: NamedType
-                          name: A @59
-                          typeArguments: TypeArgumentList
-                            leftBracket: < @60
-                            arguments
-                              GenericFunctionType
-                                functionKeyword: Function @61
-                                parameters: FormalParameterList
-                                  leftParenthesis: ( @69
-                                  rightParenthesis: ) @70
-                                declaredElement: GenericFunctionTypeElement
-                                  parameters
-                                  returnType: dynamic
-                                  type: dynamic Function()
-                                type: dynamic Function()
-                            rightBracket: > @71
-                          element: <testLibraryFragment>::@class::A
-                          type: A<dynamic Function()>
-                        staticElement: ConstructorMember
-                          base: <testLibraryFragment>::@class::A::@constructor::new
-                          substitution: {T: dynamic Function()}
-                      argumentList: ArgumentList
-                        leftParenthesis: ( @72
-                        rightParenthesis: ) @73
-                      staticType: A<dynamic Function()>
-              returnType: void
-''');
-  }
-
-  test_defaultValue_inFunctionTypedFormalParameter() async {
-    var library = await buildLibrary('''
-void f( g({a: 0 is int}) ) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional g @8
-              type: dynamic Function({dynamic a})
-              parameters
-                optionalNamed a @11
-                  type: dynamic
-          returnType: void
-''');
-  }
-
-  test_defaultValue_methodMember() async {
-    var library = await buildLibrary('''
-void f([Comparator<T> compare = Comparable.compare]) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalPositional default compare @22
-              type: int Function(InvalidType, InvalidType)
-                alias: dart:core::<fragment>::@typeAlias::Comparator
-                  typeArguments
-                    InvalidType
-              constantInitializer
-                PrefixedIdentifier
-                  prefix: SimpleIdentifier
-                    token: Comparable @32
-                    staticElement: dart:core::<fragment>::@class::Comparable
-                    staticType: null
-                  period: . @42
-                  identifier: SimpleIdentifier
-                    token: compare @43
-                    staticElement: dart:core::<fragment>::@class::Comparable::@method::compare
-                    staticType: int Function(Comparable<dynamic>, Comparable<dynamic>)
-                  staticElement: dart:core::<fragment>::@class::Comparable::@method::compare
-                  staticType: int Function(Comparable<dynamic>, Comparable<dynamic>)
-          returnType: void
-''');
-  }
-
-  test_defaultValue_recordLiteral_named() async {
-    var library = await buildLibrary('''
-void f({({int f1, bool f2}) x = (f1: 1, f2: true)}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalNamed default x @28
-              reference: <testLibraryFragment>::@function::f::@parameter::x
-              type: ({int f1, bool f2})
-              constantInitializer
-                RecordLiteral
-                  leftParenthesis: ( @32
-                  fields
-                    NamedExpression
-                      name: Label
-                        label: SimpleIdentifier
-                          token: f1 @33
-                          staticElement: <null>
-                          staticType: null
-                        colon: : @35
-                      expression: IntegerLiteral
-                        literal: 1 @37
-                        staticType: int
-                    NamedExpression
-                      name: Label
-                        label: SimpleIdentifier
-                          token: f2 @40
-                          staticElement: <null>
-                          staticType: null
-                        colon: : @42
-                      expression: BooleanLiteral
-                        literal: true @44
-                        staticType: bool
-                  rightParenthesis: ) @48
-                  staticType: ({int f1, bool f2})
-          returnType: void
-''');
-  }
-
-  test_defaultValue_recordLiteral_named_const() async {
-    var library = await buildLibrary('''
-void f({({int f1, bool f2}) x = const (f1: 1, f2: true)}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalNamed default x @28
-              reference: <testLibraryFragment>::@function::f::@parameter::x
-              type: ({int f1, bool f2})
-              constantInitializer
-                RecordLiteral
-                  constKeyword: const @32
-                  leftParenthesis: ( @38
-                  fields
-                    NamedExpression
-                      name: Label
-                        label: SimpleIdentifier
-                          token: f1 @39
-                          staticElement: <null>
-                          staticType: null
-                        colon: : @41
-                      expression: IntegerLiteral
-                        literal: 1 @43
-                        staticType: int
-                    NamedExpression
-                      name: Label
-                        label: SimpleIdentifier
-                          token: f2 @46
-                          staticElement: <null>
-                          staticType: null
-                        colon: : @48
-                      expression: BooleanLiteral
-                        literal: true @50
-                        staticType: bool
-                  rightParenthesis: ) @54
-                  staticType: ({int f1, bool f2})
-          returnType: void
-''');
-  }
-
-  test_defaultValue_recordLiteral_positional() async {
-    var library = await buildLibrary('''
-void f({(int, bool) x = (1, true)}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalNamed default x @20
-              reference: <testLibraryFragment>::@function::f::@parameter::x
-              type: (int, bool)
-              constantInitializer
-                RecordLiteral
-                  leftParenthesis: ( @24
-                  fields
-                    IntegerLiteral
-                      literal: 1 @25
-                      staticType: int
-                    BooleanLiteral
-                      literal: true @28
-                      staticType: bool
-                  rightParenthesis: ) @32
-                  staticType: (int, bool)
-          returnType: void
-''');
-  }
-
-  void test_defaultValue_recordLiteral_positional_const() async {
-    var library = await buildLibrary('''
-void f({(int, bool) x = const (1, true)}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalNamed default x @20
-              reference: <testLibraryFragment>::@function::f::@parameter::x
-              type: (int, bool)
-              constantInitializer
-                RecordLiteral
-                  constKeyword: const @24
-                  leftParenthesis: ( @30
-                  fields
-                    IntegerLiteral
-                      literal: 1 @31
-                      staticType: int
-                    BooleanLiteral
-                      literal: true @34
-                      staticType: bool
-                  rightParenthesis: ) @38
-                  staticType: (int, bool)
-          returnType: void
-''');
-  }
-
-  test_defaultValue_refersToExtension_method_inside() async {
-    var library = await buildLibrary('''
-class A {}
-extension E on A {
-  static void f() {}
-  static void g([Object p = f]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      extensions
-        E @21
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          extendedType: A
-          methods
-            static f @44
-              reference: <testLibraryFragment>::@extension::E::@method::f
-              enclosingElement: <testLibraryFragment>::@extension::E
-              returnType: void
-            static g @65
-              reference: <testLibraryFragment>::@extension::E::@method::g
-              enclosingElement: <testLibraryFragment>::@extension::E
-              parameters
-                optionalPositional default p @75
-                  type: Object
-                  constantInitializer
-                    SimpleIdentifier
-                      token: f @79
-                      staticElement: <testLibraryFragment>::@extension::E::@method::f
-                      staticType: void Function()
-              returnType: void
-''');
-  }
-
-  test_defaultValue_refersToGenericClass() async {
-    var library = await buildLibrary('''
-class B<T1, T2> {
-  const B();
-}
-class C {
-  void foo([B<int, double> b = const B()]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @6
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @8
-              defaultType: dynamic
-            covariant T2 @12
-              defaultType: dynamic
-          constructors
-            const @26
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @39
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            foo @50
-              reference: <testLibraryFragment>::@class::C::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default b @70
-                  type: B<int, double>
-                  constantInitializer
-                    InstanceCreationExpression
-                      keyword: const @74
-                      constructorName: ConstructorName
-                        type: NamedType
-                          name: B @80
-                          element: <testLibraryFragment>::@class::B
-                          type: B<int, double>
-                        staticElement: ConstructorMember
-                          base: <testLibraryFragment>::@class::B::@constructor::new
-                          substitution: {T1: int, T2: double}
-                      argumentList: ArgumentList
-                        leftParenthesis: ( @81
-                        rightParenthesis: ) @82
-                      staticType: B<int, double>
-              returnType: void
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_constructor() async {
-    var library = await buildLibrary('''
-class B<T> {
-  const B();
-}
-class C<T> {
-  const C([B<T> b = const B()]);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @6
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @34
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @36
-              defaultType: dynamic
-          constructors
-            const @49
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default b @57
-                  type: B<T>
-                  constantInitializer
-                    InstanceCreationExpression
-                      keyword: const @61
-                      constructorName: ConstructorName
-                        type: NamedType
-                          name: B @67
-                          element: <testLibraryFragment>::@class::B
-                          type: B<Never>
-                        staticElement: ConstructorMember
-                          base: <testLibraryFragment>::@class::B::@constructor::new
-                          substitution: {T: Never}
-                      argumentList: ArgumentList
-                        leftParenthesis: ( @68
-                        rightParenthesis: ) @69
-                      staticType: B<Never>
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_constructor2() async {
-    var library = await buildLibrary('''
-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 B()]);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class A @15
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @17
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @29
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @31
-              defaultType: dynamic
-          interfaces
-            A<T>
-          constructors
-            const @60
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @73
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @75
-              defaultType: dynamic
-          interfaces
-            A<Iterable<T>>
-          constructors
-            const @114
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default a @122
-                  type: A<T>
-                  constantInitializer
-                    InstanceCreationExpression
-                      keyword: const @126
-                      constructorName: ConstructorName
-                        type: NamedType
-                          name: B @132
-                          element: <testLibraryFragment>::@class::B
-                          type: B<Never>
-                        staticElement: ConstructorMember
-                          base: <testLibraryFragment>::@class::B::@constructor::new
-                          substitution: {T: Never}
-                      argumentList: ArgumentList
-                        leftParenthesis: ( @133
-                        rightParenthesis: ) @134
-                      staticType: B<Never>
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_functionG() async {
-    var library = await buildLibrary('''
-class B<T> {
-  const B();
-}
-void foo<T>([B<T> b = const B()]) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @6
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-      functions
-        foo @33
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @37
-              defaultType: dynamic
-          parameters
-            optionalPositional default b @46
-              type: B<T>
-              constantInitializer
-                InstanceCreationExpression
-                  keyword: const @50
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: B @56
-                      element: <testLibraryFragment>::@class::B
-                      type: B<Never>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@class::B::@constructor::new
-                      substitution: {T: Never}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @57
-                    rightParenthesis: ) @58
-                  staticType: B<Never>
-          returnType: void
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_methodG() async {
-    var library = await buildLibrary('''
-class B<T> {
-  const B();
-}
-class C {
-  void foo<T>([B<T> b = const B()]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @6
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @34
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            foo @45
-              reference: <testLibraryFragment>::@class::C::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              typeParameters
-                covariant T @49
-                  defaultType: dynamic
-              parameters
-                optionalPositional default b @58
-                  type: B<T>
-                  constantInitializer
-                    InstanceCreationExpression
-                      keyword: const @62
-                      constructorName: ConstructorName
-                        type: NamedType
-                          name: B @68
-                          element: <testLibraryFragment>::@class::B
-                          type: B<Never>
-                        staticElement: ConstructorMember
-                          base: <testLibraryFragment>::@class::B::@constructor::new
-                          substitution: {T: Never}
-                      argumentList: ArgumentList
-                        leftParenthesis: ( @69
-                        rightParenthesis: ) @70
-                      staticType: B<Never>
-              returnType: void
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_methodG_classG() async {
-    var library = await buildLibrary('''
-class B<T1, T2> {
-  const B();
-}
-class C<E1> {
-  void foo<E2>([B<E1, E2> b = const B()]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @6
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @8
-              defaultType: dynamic
-            covariant T2 @12
-              defaultType: dynamic
-          constructors
-            const @26
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @39
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant E1 @41
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            foo @54
-              reference: <testLibraryFragment>::@class::C::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              typeParameters
-                covariant E2 @58
-                  defaultType: dynamic
-              parameters
-                optionalPositional default b @73
-                  type: B<E1, E2>
-                  constantInitializer
-                    InstanceCreationExpression
-                      keyword: const @77
-                      constructorName: ConstructorName
-                        type: NamedType
-                          name: B @83
-                          element: <testLibraryFragment>::@class::B
-                          type: B<Never, Never>
-                        staticElement: ConstructorMember
-                          base: <testLibraryFragment>::@class::B::@constructor::new
-                          substitution: {T1: Never, T2: Never}
-                      argumentList: ArgumentList
-                        leftParenthesis: ( @84
-                        rightParenthesis: ) @85
-                      staticType: B<Never, Never>
-              returnType: void
-''');
-  }
-
-  test_defaultValue_refersToGenericClass_methodNG() async {
-    var library = await buildLibrary('''
-class B<T> {
-  const B();
-}
-class C<T> {
-  void foo([B<T> b = const B()]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @6
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @34
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @36
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            foo @48
-              reference: <testLibraryFragment>::@class::C::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default b @58
-                  type: B<T>
-                  constantInitializer
-                    InstanceCreationExpression
-                      keyword: const @62
-                      constructorName: ConstructorName
-                        type: NamedType
-                          name: B @68
-                          element: <testLibraryFragment>::@class::B
-                          type: B<Never>
-                        staticElement: ConstructorMember
-                          base: <testLibraryFragment>::@class::B::@constructor::new
-                          substitution: {T: Never}
-                      argumentList: ArgumentList
-                        leftParenthesis: ( @69
-                        rightParenthesis: ) @70
-                      staticType: B<Never>
-              returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_class() async {
-    var library = await buildLibrary(r'''
-class A {
-  static const f01 = 0;
-  static const f02 = f01;
-}
-
-class A {
-  static const f11 = 0;
-  static const f12 = f11;
-}
-
-class A {
-  static const f21 = 0;
-  static const f22 = f21;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A::@def::0
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const f01 @25
-              reference: <testLibraryFragment>::@class::A::@def::0::@field::f01
-              enclosingElement: <testLibraryFragment>::@class::A::@def::0
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @31
-                  staticType: int
-            static const f02 @49
-              reference: <testLibraryFragment>::@class::A::@def::0::@field::f02
-              enclosingElement: <testLibraryFragment>::@class::A::@def::0
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                SimpleIdentifier
-                  token: f01 @55
-                  staticElement: <testLibraryFragment>::@class::A::@def::0::@getter::f01
-                  staticType: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@def::0::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A::@def::0
-          accessors
-            synthetic static get f01 @-1
-              reference: <testLibraryFragment>::@class::A::@def::0::@getter::f01
-              enclosingElement: <testLibraryFragment>::@class::A::@def::0
-              returnType: int
-            synthetic static get f02 @-1
-              reference: <testLibraryFragment>::@class::A::@def::0::@getter::f02
-              enclosingElement: <testLibraryFragment>::@class::A::@def::0
-              returnType: int
-        class A @69
-          reference: <testLibraryFragment>::@class::A::@def::1
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const f11 @88
-              reference: <testLibraryFragment>::@class::A::@def::1::@field::f11
-              enclosingElement: <testLibraryFragment>::@class::A::@def::1
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @94
-                  staticType: int
-            static const f12 @112
-              reference: <testLibraryFragment>::@class::A::@def::1::@field::f12
-              enclosingElement: <testLibraryFragment>::@class::A::@def::1
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                SimpleIdentifier
-                  token: f11 @118
-                  staticElement: <testLibraryFragment>::@class::A::@def::1::@getter::f11
-                  staticType: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@def::1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A::@def::1
-          accessors
-            synthetic static get f11 @-1
-              reference: <testLibraryFragment>::@class::A::@def::1::@getter::f11
-              enclosingElement: <testLibraryFragment>::@class::A::@def::1
-              returnType: int
-            synthetic static get f12 @-1
-              reference: <testLibraryFragment>::@class::A::@def::1::@getter::f12
-              enclosingElement: <testLibraryFragment>::@class::A::@def::1
-              returnType: int
-        class A @132
-          reference: <testLibraryFragment>::@class::A::@def::2
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const f21 @151
-              reference: <testLibraryFragment>::@class::A::@def::2::@field::f21
-              enclosingElement: <testLibraryFragment>::@class::A::@def::2
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @157
-                  staticType: int
-            static const f22 @175
-              reference: <testLibraryFragment>::@class::A::@def::2::@field::f22
-              enclosingElement: <testLibraryFragment>::@class::A::@def::2
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                SimpleIdentifier
-                  token: f21 @181
-                  staticElement: <testLibraryFragment>::@class::A::@def::2::@getter::f21
-                  staticType: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@def::2::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A::@def::2
-          accessors
-            synthetic static get f21 @-1
-              reference: <testLibraryFragment>::@class::A::@def::2::@getter::f21
-              enclosingElement: <testLibraryFragment>::@class::A::@def::2
-              returnType: int
-            synthetic static get f22 @-1
-              reference: <testLibraryFragment>::@class::A::@def::2::@getter::f22
-              enclosingElement: <testLibraryFragment>::@class::A::@def::2
-              returnType: int
-''');
-  }
-
-  test_duplicateDeclaration_class_constructor_unnamed() async {
-    var library = await buildLibrary(r'''
-class A {
-  A.named();
-  A.named();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            named @14
-              reference: <testLibraryFragment>::@class::A::@constructor::named::@def::0
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 13
-              nameEnd: 19
-            named @27
-              reference: <testLibraryFragment>::@class::A::@constructor::named::@def::1
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 26
-              nameEnd: 32
-''');
-  }
-
-  test_duplicateDeclaration_class_field() async {
-    var library = await buildLibrary(r'''
-class A {
-  int foo;
-  double foo;
-}
-''');
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            foo @16
-              reference: <testLibraryFragment>::@class::A::@field::foo::@def::0
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-            foo @30
-              reference: <testLibraryFragment>::@class::A::@field::foo::@def::1
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: double
-              id: field_1
-              getter: getter_1
-              setter: setter_1
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo::@def::0
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo::@def::0
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo::@def::1
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: double
-              id: getter_1
-              variable: field_1
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo::@def::1
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: double
-              returnType: void
-              id: setter_1
-              variable: field_1
-''');
-  }
-
-  test_duplicateDeclaration_class_method() async {
-    var library = await buildLibrary(r'''
-class A {
-  void foo() {}
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @17
-              reference: <testLibraryFragment>::@class::A::@method::foo::@def::0
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-            foo @33
-              reference: <testLibraryFragment>::@class::A::@method::foo::@def::1
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_classTypeAlias() async {
-    var library = await buildLibrary(r'''
-class A {}
-class B {}
-class X = A with M;
-class X = B with M;
-mixin M {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @17
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class alias X @28
-          reference: <testLibraryFragment>::@class::X::@def::0
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          mixins
-            M
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@def::0::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X::@def::0
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-        class alias X @48
-          reference: <testLibraryFragment>::@class::X::@def::1
-          enclosingElement: <testLibraryFragment>
-          supertype: B
-          mixins
-            M
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@def::1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X::@def::1
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::B::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::B::@constructor::new
-      mixins
-        mixin M @68
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_duplicateDeclaration_enum() async {
-    var library = await buildLibrary(r'''
-enum E {a, b}
-enum E {c, d, e}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E::@def::0
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant a @8
-              reference: <testLibraryFragment>::@enum::E::@def::0::@field::a
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E::@def::0
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant b @11
-              reference: <testLibraryFragment>::@enum::E::@def::0::@field::b
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E::@def::0
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@def::0::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: a @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@def::0::@getter::a
-                      staticType: E
-                    SimpleIdentifier
-                      token: b @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@def::0::@getter::b
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@enum::E::@def::0::@getter::a
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
-              returnType: E
-            synthetic static get b @-1
-              reference: <testLibraryFragment>::@enum::E::@def::0::@getter::b
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@def::0::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::0
-              returnType: List<E>
-        enum E @19
-          reference: <testLibraryFragment>::@enum::E::@def::1
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant c @22
-              reference: <testLibraryFragment>::@enum::E::@def::1::@field::c
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E::@def::0
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant d @25
-              reference: <testLibraryFragment>::@enum::E::@def::1::@field::d
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E::@def::0
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant e @28
-              reference: <testLibraryFragment>::@enum::E::@def::1::@field::e
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E::@def::0
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@def::0::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@def::1::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: c @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@def::1::@getter::c
-                      staticType: E
-                    SimpleIdentifier
-                      token: d @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@def::1::@getter::d
-                      staticType: E
-                    SimpleIdentifier
-                      token: e @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@def::1::@getter::e
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@def::1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
-          accessors
-            synthetic static get c @-1
-              reference: <testLibraryFragment>::@enum::E::@def::1::@getter::c
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
-              returnType: E
-            synthetic static get d @-1
-              reference: <testLibraryFragment>::@enum::E::@def::1::@getter::d
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
-              returnType: E
-            synthetic static get e @-1
-              reference: <testLibraryFragment>::@enum::E::@def::1::@getter::e
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@def::1::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E::@def::1
-              returnType: List<E>
-''');
-  }
-
-  test_duplicateDeclaration_extension() async {
-    var library = await buildLibrary(r'''
-extension E on int {}
-extension E on int {
-  static var x;
-}
-extension E on int {
-  static var y = 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        E @10
-          reference: <testLibraryFragment>::@extension::E::@def::0
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-        E @32
-          reference: <testLibraryFragment>::@extension::E::@def::1
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          fields
-            static x @56
-              reference: <testLibraryFragment>::@extension::E::@def::1::@field::x
-              enclosingElement: <testLibraryFragment>::@extension::E::@def::1
-              type: dynamic
-          accessors
-            synthetic static get x @-1
-              reference: <testLibraryFragment>::@extension::E::@def::1::@getter::x
-              enclosingElement: <testLibraryFragment>::@extension::E::@def::1
-              returnType: dynamic
-            synthetic static set x= @-1
-              reference: <testLibraryFragment>::@extension::E::@def::1::@setter::x
-              enclosingElement: <testLibraryFragment>::@extension::E::@def::1
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-        E @71
-          reference: <testLibraryFragment>::@extension::E::@def::2
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          fields
-            static y @95
-              reference: <testLibraryFragment>::@extension::E::@def::2::@field::y
-              enclosingElement: <testLibraryFragment>::@extension::E::@def::2
-              type: int
-              shouldUseTypeForInitializerInference: false
-          accessors
-            synthetic static get y @-1
-              reference: <testLibraryFragment>::@extension::E::@def::2::@getter::y
-              enclosingElement: <testLibraryFragment>::@extension::E::@def::2
-              returnType: int
-            synthetic static set y= @-1
-              reference: <testLibraryFragment>::@extension::E::@def::2::@setter::y
-              enclosingElement: <testLibraryFragment>::@extension::E::@def::2
-              parameters
-                requiredPositional _y @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_extensionType() async {
-    var library = await buildLibrary(r'''
-extension type E(int it) {}
-extension type E(double it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        E @15
-          reference: <testLibraryFragment>::@extensionType::E::@def::0
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::E::@def::0::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::E::@def::0::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::E::@def::0::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::0
-              type: int
-          constructors
-            @15
-              reference: <testLibraryFragment>::@extensionType::E::@def::0::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::0
-              parameters
-                requiredPositional final this.it @21
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::E::@def::0::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::E::@def::0::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::0
-              returnType: int
-        E @43
-          reference: <testLibraryFragment>::@extensionType::E::@def::1
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::E::@def::1::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::E::@def::1::@constructor::new
-          typeErasure: double
-          fields
-            final it @52
-              reference: <testLibraryFragment>::@extensionType::E::@def::1::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::1
-              type: double
-          constructors
-            @43
-              reference: <testLibraryFragment>::@extensionType::E::@def::1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::1
-              parameters
-                requiredPositional final this.it @52
-                  type: double
-                  field: <testLibraryFragment>::@extensionType::E::@def::1::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::E::@def::1::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::E::@def::1
-              returnType: double
-''');
-  }
-
-  test_duplicateDeclaration_function() async {
-    var library = await buildLibrary(r'''
-void f() {}
-void f(int a) {}
-void f([int b, double c]) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f::@def::0
-          enclosingElement: <testLibraryFragment>
-          returnType: void
-        f @17
-          reference: <testLibraryFragment>::@function::f::@def::1
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @23
-              type: int
-          returnType: void
-        f @34
-          reference: <testLibraryFragment>::@function::f::@def::2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalPositional default b @41
-              type: int
-            optionalPositional default c @51
-              type: double
-          returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_function_namedParameter() async {
-    var library = await buildLibrary(r'''
-void f({int a, double a}) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalNamed default a @12
-              reference: <testLibraryFragment>::@function::f::@parameter::a::@def::0
-              type: int
-            optionalNamed default a @22
-              reference: <testLibraryFragment>::@function::f::@parameter::a::@def::1
-              type: double
-          returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_functionTypeAlias() async {
-    var library = await buildLibrary(r'''
-typedef void F();
-typedef void F(int a);
-typedef void F([int b, double c]);
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @13
-          reference: <testLibraryFragment>::@typeAlias::F::@def::0
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-        functionTypeAliasBased F @31
-          reference: <testLibraryFragment>::@typeAlias::F::@def::1
-          aliasedType: void Function(int)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @37
-                type: int
-            returnType: void
-        functionTypeAliasBased F @54
-          reference: <testLibraryFragment>::@typeAlias::F::@def::2
-          aliasedType: void Function([int, double])
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              optionalPositional b @61
-                type: int
-              optionalPositional c @71
-                type: double
-            returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_mixin() async {
-    var library = await buildLibrary(r'''
-mixin A {}
-mixin A {
-  var x;
-}
-mixin A {
-  var y = 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @6
-          reference: <testLibraryFragment>::@mixin::A::@def::0
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-        mixin A @17
-          reference: <testLibraryFragment>::@mixin::A::@def::1
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            x @27
-              reference: <testLibraryFragment>::@mixin::A::@def::1::@field::x
-              enclosingElement: <testLibraryFragment>::@mixin::A::@def::1
-              type: dynamic
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@mixin::A::@def::1::@getter::x
-              enclosingElement: <testLibraryFragment>::@mixin::A::@def::1
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@mixin::A::@def::1::@setter::x
-              enclosingElement: <testLibraryFragment>::@mixin::A::@def::1
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-        mixin A @38
-          reference: <testLibraryFragment>::@mixin::A::@def::2
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            y @48
-              reference: <testLibraryFragment>::@mixin::A::@def::2::@field::y
-              enclosingElement: <testLibraryFragment>::@mixin::A::@def::2
-              type: int
-              shouldUseTypeForInitializerInference: false
-          accessors
-            synthetic get y @-1
-              reference: <testLibraryFragment>::@mixin::A::@def::2::@getter::y
-              enclosingElement: <testLibraryFragment>::@mixin::A::@def::2
-              returnType: int
-            synthetic set y= @-1
-              reference: <testLibraryFragment>::@mixin::A::@def::2::@setter::y
-              enclosingElement: <testLibraryFragment>::@mixin::A::@def::2
-              parameters
-                requiredPositional _y @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_duplicateDeclaration_topLevelVariable() async {
-    var library = await buildLibrary(r'''
-bool x;
-var x;
-final x = 1;
-var x = 2.3;
-''');
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static x @5
-          reference: <testLibraryFragment>::@topLevelVariable::x::@def::0
-          enclosingElement: <testLibraryFragment>
-          type: bool
-          id: variable_0
-          getter: getter_0
-          setter: setter_0
-        static x @12
-          reference: <testLibraryFragment>::@topLevelVariable::x::@def::1
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          id: variable_1
-          getter: getter_1
-          setter: setter_1
-        static final x @21
-          reference: <testLibraryFragment>::@topLevelVariable::x::@def::2
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          id: variable_2
-          getter: getter_2
-        static x @32
-          reference: <testLibraryFragment>::@topLevelVariable::x::@def::3
-          enclosingElement: <testLibraryFragment>
-          type: double
-          shouldUseTypeForInitializerInference: false
-          id: variable_3
-          getter: getter_3
-          setter: setter_2
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x::@def::0
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-          id: getter_0
-          variable: variable_0
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x::@def::0
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: bool
-          returnType: void
-          id: setter_0
-          variable: variable_0
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x::@def::1
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-          id: getter_1
-          variable: variable_1
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x::@def::1
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: dynamic
-          returnType: void
-          id: setter_1
-          variable: variable_1
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x::@def::2
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_2
-          variable: variable_2
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x::@def::3
-          enclosingElement: <testLibraryFragment>
-          returnType: double
-          id: getter_3
-          variable: variable_3
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x::@def::2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: double
-          returnType: void
-          id: setter_2
-          variable: variable_3
-''');
-  }
-
-  test_duplicateDeclaration_unit_getter() async {
-    var library = await buildLibrary(r'''
-int get foo {}
-double get foo {}
-''');
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: double
-          id: variable_0
-          getter: getter_0
-      accessors
-        static get foo @8
-          reference: <testLibraryFragment>::@getter::foo::@def::0
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_1
-          variable: variable_0
-        static get foo @26
-          reference: <testLibraryFragment>::@getter::foo::@def::1
-          enclosingElement: <testLibraryFragment>
-          returnType: double
-          id: getter_0
-          variable: variable_0
-''');
-  }
-
-  test_duplicateDeclaration_unit_setter() async {
-    var library = await buildLibrary(r'''
-set foo(int _) {}
-set foo(double _) {}
-''');
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: double
-          id: variable_0
-          setter: setter_0
-      accessors
-        static set foo= @4
-          reference: <testLibraryFragment>::@setter::foo::@def::0
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _ @12
-              type: int
-          returnType: void
-          id: setter_1
-          variable: variable_0
-        static set foo= @22
-          reference: <testLibraryFragment>::@setter::foo::@def::1
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _ @33
-              type: double
-          returnType: void
-          id: setter_0
-          variable: variable_0
-''');
-  }
-
-  test_enum_constant_inference() async {
-    var library = await buildLibrary(r'''
-enum E<T> {
-  int(1), string('2');
-  const E(T a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            static const enumConstant int @14
-              reference: <testLibraryFragment>::@enum::E::@field::int
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E<int>
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E<int>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@enum::E::@constructor::new
-                      substitution: {T: int}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      IntegerLiteral
-                        literal: 1 @18
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticType: E<int>
-            static const enumConstant string @22
-              reference: <testLibraryFragment>::@enum::E::@field::string
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E<String>
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E<String>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@enum::E::@constructor::new
-                      substitution: {T: String}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleStringLiteral
-                        literal: '2' @29
-                    rightParenthesis: ) @0
-                  staticType: E<String>
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: int @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::int
-                      staticType: E<int>
-                    SimpleIdentifier
-                      token: string @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::string
-                      staticType: E<String>
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-          constructors
-            const @43
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                requiredPositional a @47
-                  type: T
-          accessors
-            synthetic static get int @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::int
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E<int>
-            synthetic static get string @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::string
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E<String>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-''');
-  }
-
-  /// Test that a constant named `_name` renames the synthetic `name` field.
-  test_enum_constant_name() async {
-    var library = await buildLibrary(r'''
-enum E {
-  _name;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant _name @11
-              reference: <testLibraryFragment>::@enum::E::@field::_name
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: _name @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::_name
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get _name @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::_name
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enum_constant_typeArguments() async {
-    var library = await buildLibrary(r'''
-enum E<T> {
-  v<double>(42);
-  const E(T a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            static const enumConstant v @14
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E<double>
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      typeArguments: TypeArgumentList
-                        leftBracket: < @15
-                        arguments
-                          NamedType
-                            name: double @16
-                            element: dart:core::<fragment>::@class::double
-                            type: double
-                        rightBracket: > @22
-                      element: <testLibraryFragment>::@enum::E
-                      type: E<double>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@enum::E::@constructor::new
-                      substitution: {T: double}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      IntegerLiteral
-                        literal: 42 @24
-                        staticType: double
-                    rightParenthesis: ) @0
-                  staticType: E<double>
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E<double>
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-          constructors
-            const @37
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                requiredPositional a @41
-                  type: T
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E<double>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_constant_underscore() async {
-    var library = await buildLibrary('''
-enum E {
-  _
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant _ @11
-              reference: <testLibraryFragment>::@enum::E::@field::_
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: _ @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::_
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get _ @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::_
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_factory_named() async {
-    var library = await buildLibrary(r'''
-enum E {
-  v;
-  factory E.named() => v;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            factory named @26
-              reference: <testLibraryFragment>::@enum::E::@constructor::named
-              enclosingElement: <testLibraryFragment>::@enum::E
-              periodOffset: 25
-              nameEnd: 31
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_factory_unnamed() async {
-    var library = await buildLibrary(r'''
-enum E {
-  v;
-  factory E() => v;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            factory @24
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_fieldFormal_functionTyped_withReturnType() async {
-    var library = await buildLibrary(r'''
-enum E {
-  v;
-  final x;
-  const E(int this.x(double a));
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-            final x @22
-              reference: <testLibraryFragment>::@enum::E::@field::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: dynamic
-          constructors
-            const @33
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                requiredPositional final this.x @44
-                  type: int Function(double)
-                  parameters
-                    requiredPositional a @53
-                      type: double
-                  field: <testLibraryFragment>::@enum::E::@field::x
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: dynamic
-''');
-  }
-
-  test_enum_constructor_fieldFormal_multiple_matching_fields() async {
-    var library = await buildLibrary('''
-enum E {
-  v;
-  final int x;
-  final String x;
-  const E(this.x);
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-            final x @26
-              reference: <testLibraryFragment>::@enum::E::@field::x::@def::0
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: int
-            final x @44
-              reference: <testLibraryFragment>::@enum::E::@field::x::@def::1
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: String
-          constructors
-            const @55
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                requiredPositional final this.x @62
-                  type: int
-                  field: <testLibraryFragment>::@enum::E::@field::x::@def::0
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::x::@def::0
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: int
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::x::@def::1
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: String
-''');
-  }
-
-  test_enum_constructor_fieldFormal_no_matching_field() async {
-    var library = await buildLibrary('''
-enum E {
-  v;
-  const E(this.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            const @22
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                requiredPositional final this.x @29
-                  type: dynamic
-                  field: <null>
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_fieldFormal_optionalNamed_defaultValue() async {
-    var library = await buildLibrary(r'''
-enum E {
-  v;
-  final int x;
-  const E({this.x = 1 + 2});
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-            final x @26
-              reference: <testLibraryFragment>::@enum::E::@field::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: int
-          constructors
-            const @37
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                optionalNamed default final this.x @45
-                  reference: <testLibraryFragment>::@enum::E::@constructor::new::@parameter::x
-                  type: int
-                  constantInitializer
-                    BinaryExpression
-                      leftOperand: IntegerLiteral
-                        literal: 1 @49
-                        staticType: int
-                      operator: + @51
-                      rightOperand: IntegerLiteral
-                        literal: 2 @53
-                        staticType: int
-                      staticElement: dart:core::<fragment>::@class::num::@method::+
-                      staticInvokeType: num Function(num)
-                      staticType: int
-                  field: <testLibraryFragment>::@enum::E::@field::x
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: int
-''');
-  }
-
-  test_enum_constructor_fieldFormal_typed_typed() async {
-    var library = await buildLibrary('''
-enum E {
-  v;
-  final num x;
-  const E(int this.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-            final x @26
-              reference: <testLibraryFragment>::@enum::E::@field::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: num
-          constructors
-            const @37
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                requiredPositional final this.x @48
-                  type: int
-                  field: <testLibraryFragment>::@enum::E::@field::x
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: num
-''');
-  }
-
-  test_enum_constructor_fieldFormal_untyped_typed() async {
-    var library = await buildLibrary(r'''
-enum E {
-  v;
-  final x;
-  E(int this.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-            final x @22
-              reference: <testLibraryFragment>::@enum::E::@field::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: dynamic
-          constructors
-            @27
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                requiredPositional final this.x @38
-                  type: int
-                  field: <testLibraryFragment>::@enum::E::@field::x
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: dynamic
-''');
-  }
-
-  test_enum_constructor_fieldFormal_untyped_untyped() async {
-    var library = await buildLibrary(r'''
-enum E {
-  v;
-  final x;
-  E(this.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-            final x @22
-              reference: <testLibraryFragment>::@enum::E::@field::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: dynamic
-          constructors
-            @27
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                requiredPositional final this.x @34
-                  type: dynamic
-                  field: <testLibraryFragment>::@enum::E::@field::x
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: dynamic
-''');
-  }
-
-  test_enum_constructor_generative_named() async {
-    var library = await buildLibrary(r'''
-enum E {
-  v.named(42);
-  const E.named(int a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    period: . @0
-                    name: SimpleIdentifier
-                      token: named @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@constructor::named
-                      staticType: null
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::named
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      IntegerLiteral
-                        literal: 42 @19
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            const named @34
-              reference: <testLibraryFragment>::@enum::E::@constructor::named
-              enclosingElement: <testLibraryFragment>::@enum::E
-              periodOffset: 33
-              nameEnd: 39
-              parameters
-                requiredPositional a @44
-                  type: int
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_generative_unnamed() async {
-    var library = await buildLibrary(r'''
-enum E {
-  v(42);
-  const E(int a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      IntegerLiteral
-                        literal: 42 @13
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            const @26
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                requiredPositional a @32
-                  type: int
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enum_constructor_initializer() async {
-    var library = await buildLibrary(r'''
-enum E<T> {
-  v;
-  final int x;
-  const E(T? a) : assert(a is T), x = 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            static const enumConstant v @14
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E<dynamic>
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E<dynamic>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@enum::E::@constructor::new
-                      substitution: {T: dynamic}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E<dynamic>
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E<dynamic>
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-            final x @29
-              reference: <testLibraryFragment>::@enum::E::@field::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: int
-          constructors
-            const @40
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                requiredPositional a @45
-                  type: T?
-              constantInitializers
-                AssertInitializer
-                  assertKeyword: assert @50
-                  leftParenthesis: ( @56
-                  condition: IsExpression
-                    expression: SimpleIdentifier
-                      token: a @57
-                      staticElement: <testLibraryFragment>::@enum::E::@constructor::new::@parameter::a
-                      staticType: T?
-                    isOperator: is @59
-                    type: NamedType
-                      name: T @62
-                      element: T@7
-                      type: T
-                    staticType: bool
-                  rightParenthesis: ) @63
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: x @66
-                    staticElement: <testLibraryFragment>::@enum::E::@field::x
-                    staticType: null
-                  equals: = @68
-                  expression: IntegerLiteral
-                    literal: 0 @70
-                    staticType: int
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E<dynamic>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::x
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: int
-''');
-  }
-
-  test_enum_documented() async {
-    var library = await buildLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-enum E { v }''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @65
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * Docs\n */
-          supertype: Enum
-          fields
-            static const enumConstant v @69
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enum_field() async {
-    var library = await buildLibrary(r'''
-enum E {
-  v;
-  final foo = 42;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-            final foo @22
-              reference: <testLibraryFragment>::@enum::E::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 42 @28
-                  staticType: int
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: int
-''');
-  }
-
-  test_enum_field_isPromotable() async {
-    var library = await buildLibrary(r'''
-enum E {
-  v(null);
-  final int? _foo;
-  E(this._foo);
-}
-''');
-    configuration.forPromotableFields(
-      enumNames: {'E'},
-      fieldNames: {'_foo'},
-    );
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            final promotable _foo @33
-              reference: <testLibraryFragment>::@enum::E::@field::_foo
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: int?
-''');
-  }
-
-  test_enum_getter() async {
-    var library = await buildLibrary(r'''
-enum E{
-  v;
-  int get foo => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @10
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@enum::E::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: int
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-            get foo @23
-              reference: <testLibraryFragment>::@enum::E::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: int
-''');
-  }
-
-  test_enum_interfaces() async {
-    var library = await buildLibrary(r'''
-class I {}
-enum E implements I {
-  v;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I @6
-          reference: <testLibraryFragment>::@class::I
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I
-      enums
-        enum E @16
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          interfaces
-            I
-          fields
-            static const enumConstant v @35
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enum_interfaces_extensionType() async {
-    var library = await buildLibrary(r'''
-class A {}
-extension type B(int it) {}
-class C {}
-enum E implements A, B, C { v }
-''');
-    configuration
-      ..withConstructors = false
-      ..withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-        class C @45
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-      enums
-        enum E @55
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          interfaces
-            A
-            C
-          fields
-            static const enumConstant v @78
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      extensionTypes
-        B @26
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: int
-          fields
-            final it @32
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: int
-''');
-  }
-
-  test_enum_interfaces_generic() async {
-    var library = await buildLibrary(r'''
-class I<T> {}
-enum E<U> implements I<U> {
-  v;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I @6
-          reference: <testLibraryFragment>::@class::I
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I
-      enums
-        enum E @19
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U @21
-              defaultType: dynamic
-          supertype: Enum
-          interfaces
-            I<U>
-          fields
-            static const enumConstant v @44
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E<dynamic>
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E<dynamic>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@enum::E::@constructor::new
-                      substitution: {U: dynamic}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E<dynamic>
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E<dynamic>
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E<dynamic>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_interfaces_unresolved() async {
-    var library = await buildLibrary('''
-class X {}
-class Z {}
-enum E implements X, Y, Z {
-  v
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class X @6
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-        class Z @17
-          reference: <testLibraryFragment>::@class::Z
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::Z::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::Z
-      enums
-        enum E @27
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          interfaces
-            X
-            Z
-          fields
-            static const enumConstant v @52
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enum_method() async {
-    var library = await buildLibrary(r'''
-enum E<T> {
-  v;
-  int foo<U>(T t, U u) => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            static const enumConstant v @14
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E<dynamic>
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E<dynamic>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@enum::E::@constructor::new
-                      substitution: {T: dynamic}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E<dynamic>
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E<dynamic>
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E<dynamic>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-          methods
-            foo @23
-              reference: <testLibraryFragment>::@enum::E::@method::foo
-              enclosingElement: <testLibraryFragment>::@enum::E
-              typeParameters
-                covariant U @27
-                  defaultType: dynamic
-              parameters
-                requiredPositional t @32
-                  type: T
-                requiredPositional u @37
-                  type: U
-              returnType: int
-''');
-  }
-
-  test_enum_method_toString() async {
-    var library = await buildLibrary(r'''
-enum E {
-  v;
-  String toString() => 'E';
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @11
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-          methods
-            toString @23
-              reference: <testLibraryFragment>::@enum::E::@method::toString
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: String
-''');
-  }
-
-  test_enum_mixins() async {
-    var library = await buildLibrary(r'''
-mixin M {}
-enum E with M {
-  v;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @16
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          mixins
-            M
-          fields
-            static const enumConstant v @29
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_enum_mixins_extensionType() async {
-    var library = await buildLibrary(r'''
-class A {}
-extension type B(int it) {}
-class C {}
-enum E with A, B, C { v }
-''');
-    configuration
-      ..withConstructors = false
-      ..withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-        class C @45
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-      enums
-        enum E @55
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          mixins
-            A
-            C
-          fields
-            static const enumConstant v @72
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      extensionTypes
-        B @26
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: int
-          fields
-            final it @32
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: int
-''');
-  }
-
-  test_enum_mixins_inference() async {
-    var library = await buildLibrary(r'''
-mixin M1<T> {}
-mixin M2<T> on M1<T> {}
-enum E with M1<int>, M2 {
-  v;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @44
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          mixins
-            M1<int>
-            M2<int>
-          fields
-            static const enumConstant v @67
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      mixins
-        mixin M1 @6
-          reference: <testLibraryFragment>::@mixin::M1
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @9
-              defaultType: dynamic
-          superclassConstraints
-            Object
-        mixin M2 @21
-          reference: <testLibraryFragment>::@mixin::M2
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @24
-              defaultType: dynamic
-          superclassConstraints
-            M1<T>
-''');
-  }
-
-  test_enum_setter() async {
-    var library = await buildLibrary(r'''
-enum E{
-  v;
-  set foo(int _) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @10
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@enum::E::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: int
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-            set foo= @19
-              reference: <testLibraryFragment>::@enum::E::@setter::foo
-              enclosingElement: <testLibraryFragment>::@enum::E
-              parameters
-                requiredPositional _ @27
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_enum_typeParameters() async {
-    var library = await buildLibrary('''
-enum E<T> {
-  v
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            static const enumConstant v @14
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E<dynamic>
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E<dynamic>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@enum::E::@constructor::new
-                      substitution: {T: dynamic}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E<dynamic>
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E<dynamic>
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E<dynamic>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_bound() async {
-    var library = await buildLibrary('''
-enum E<T extends num, U extends T> {
-  v
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        notSimplyBounded enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              bound: num
-              defaultType: num
-            covariant U @22
-              bound: T
-              defaultType: num
-          supertype: Enum
-          fields
-            static const enumConstant v @39
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E<num, num>
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E<num, num>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@enum::E::@constructor::new
-                      substitution: {T: num, U: num}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E<num, num>
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<num, num>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E<num, num>
-                  rightBracket: ] @0
-                  staticType: List<E<num, num>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E<num, num>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<num, num>>
-''');
-  }
-
-  test_enum_typeParameters_cycle_1of1() async {
-    var library = await buildLibrary('''
-enum E<T extends T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        notSimplyBounded enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              bound: dynamic
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_cycle_2of3() async {
-    var library = await buildLibrary(r'''
-enum E<T extends V, U extends num, V extends T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        notSimplyBounded enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              bound: dynamic
-              defaultType: dynamic
-            covariant U @20
-              bound: num
-              defaultType: num
-            covariant V @35
-              bound: dynamic
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic, num, dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic, num, dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic, num, dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_defaultType_cycle_genericFunctionType() async {
-    var library = await buildLibrary(r'''
-enum E<T extends void Function(E)> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        notSimplyBounded enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              bound: void Function(E<dynamic>)
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_variance_contravariant() async {
-    var library = await buildLibrary('''
-enum E<in T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            contravariant T @10
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_variance_covariant() async {
-    var library = await buildLibrary('''
-enum E<out T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @11
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_variance_invariant() async {
-    var library = await buildLibrary('''
-enum E<inout T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            invariant T @13
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-''');
-  }
-
-  test_enum_typeParameters_variance_multiple() async {
-    var library = await buildLibrary('''
-enum E<inout T, in U, out V> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            invariant T @13
-              defaultType: dynamic
-            contravariant U @19
-              defaultType: dynamic
-            covariant V @26
-              defaultType: dynamic
-          supertype: Enum
-          fields
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic, dynamic, dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic, dynamic, dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic, dynamic, dynamic>>
-''');
-  }
-
-  test_enum_value_documented() async {
-    var library = await buildLibrary('''
-enum E {
-  /**
-   * aaa
-   */
-  a,
-  /// bbb
-  b
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant a @32
-              reference: <testLibraryFragment>::@enum::E::@field::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              documentationComment: /**\n   * aaa\n   */
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant b @47
-              reference: <testLibraryFragment>::@enum::E::@field::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              documentationComment: /// bbb
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: a @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
-                      staticType: E
-                    SimpleIdentifier
-                      token: b @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get b @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enum_value_documented_withMetadata() async {
-    var library = await buildLibrary('''
-enum E {
-  /**
-   * aaa
-   */
-  @annotation
-  a,
-  /// bbb
-  @annotation
-  b,
-}
-
-const int annotation = 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant a @46
-              reference: <testLibraryFragment>::@enum::E::@field::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              documentationComment: /**\n   * aaa\n   */
-              metadata
-                Annotation
-                  atSign: @ @32
-                  name: SimpleIdentifier
-                    token: annotation @33
-                    staticElement: <testLibraryFragment>::@getter::annotation
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::annotation
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant b @75
-              reference: <testLibraryFragment>::@enum::E::@field::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              documentationComment: /// bbb
-              metadata
-                Annotation
-                  atSign: @ @61
-                  name: SimpleIdentifier
-                    token: annotation @62
-                    staticElement: <testLibraryFragment>::@getter::annotation
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::annotation
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: a @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
-                      staticType: E
-                    SimpleIdentifier
-                      token: b @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get b @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      topLevelVariables
-        static const annotation @91
-          reference: <testLibraryFragment>::@topLevelVariable::annotation
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @104
-              staticType: int
-      accessors
-        synthetic static get annotation @-1
-          reference: <testLibraryFragment>::@getter::annotation
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_enum_values() async {
-    var library = await buildLibrary('enum E { v1, v2 }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v1 @9
-              reference: <testLibraryFragment>::@enum::E::@field::v1
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant v2 @13
-              reference: <testLibraryFragment>::@enum::E::@field::v2
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v1 @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v1
-                      staticType: E
-                    SimpleIdentifier
-                      token: v2 @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v2
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v1 @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v1
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get v2 @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v2
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_enums() async {
-    var library = await buildLibrary('enum E1 { v1 } enum E2 { v2 }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E1 @5
-          reference: <testLibraryFragment>::@enum::E1
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v1 @10
-              reference: <testLibraryFragment>::@enum::E1::@field::v1
-              enclosingElement: <testLibraryFragment>::@enum::E1
-              type: E1
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E1 @-1
-                      element: <testLibraryFragment>::@enum::E1
-                      type: E1
-                    staticElement: <testLibraryFragment>::@enum::E1::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E1
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E1::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E1
-              type: List<E1>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v1 @-1
-                      staticElement: <testLibraryFragment>::@enum::E1::@getter::v1
-                      staticType: E1
-                  rightBracket: ] @0
-                  staticType: List<E1>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E1
-          accessors
-            synthetic static get v1 @-1
-              reference: <testLibraryFragment>::@enum::E1::@getter::v1
-              enclosingElement: <testLibraryFragment>::@enum::E1
-              returnType: E1
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E1::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E1
-              returnType: List<E1>
-        enum E2 @20
-          reference: <testLibraryFragment>::@enum::E2
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v2 @25
-              reference: <testLibraryFragment>::@enum::E2::@field::v2
-              enclosingElement: <testLibraryFragment>::@enum::E2
-              type: E2
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E2 @-1
-                      element: <testLibraryFragment>::@enum::E2
-                      type: E2
-                    staticElement: <testLibraryFragment>::@enum::E2::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E2
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E2::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E2
-              type: List<E2>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v2 @-1
-                      staticElement: <testLibraryFragment>::@enum::E2::@getter::v2
-                      staticType: E2
-                  rightBracket: ] @0
-                  staticType: List<E2>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E2::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E2
-          accessors
-            synthetic static get v2 @-1
-              reference: <testLibraryFragment>::@enum::E2::@getter::v2
-              enclosingElement: <testLibraryFragment>::@enum::E2
-              returnType: E2
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E2::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E2
-              returnType: List<E2>
-''');
-  }
-
-  test_error_extendsEnum() async {
-    var library = await buildLibrary('''
-enum E {a, b, c}
-
-class M {}
-
-class A extends E {
-  foo() {}
-}
-
-class B implements E, M {
-  foo() {}
-}
-
-class C extends Object with E, M {
-  foo() {}
-}
-
-class D = Object with M, E;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class M @24
-          reference: <testLibraryFragment>::@class::M
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::M::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::M
-        class A @36
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @52
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: dynamic
-        class B @70
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            M
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-          methods
-            foo @92
-              reference: <testLibraryFragment>::@class::B::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: dynamic
-        class C @110
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            foo @141
-              reference: <testLibraryFragment>::@class::C::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-        class alias D @159
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant a @8
-              reference: <testLibraryFragment>::@enum::E::@field::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant b @11
-              reference: <testLibraryFragment>::@enum::E::@field::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant c @14
-              reference: <testLibraryFragment>::@enum::E::@field::c
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: a @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
-                      staticType: E
-                    SimpleIdentifier
-                      token: b @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
-                      staticType: E
-                    SimpleIdentifier
-                      token: c @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::c
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get b @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get c @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::c
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_executable_parameter_type_typedef() async {
-    var library = await buildLibrary(r'''
-typedef F(int p);
-main(F f) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function(int)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional p @14
-                type: int
-            returnType: dynamic
-      functions
-        main @18
-          reference: <testLibraryFragment>::@function::main
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional f @25
-              type: dynamic Function(int)
-                alias: <testLibraryFragment>::@typeAlias::F
-          returnType: dynamic
-''');
-  }
-
-  test_export_class() async {
-    addSource('$testPackageLibPath/a.dart', 'class C {}');
-    var library = await buildLibrary('export "a.dart";');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@class::C
-  exportNamespace
-    C: package:test/a.dart::<fragment>::@class::C
-''');
-  }
-
-  test_export_class_type_alias() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class C = _D with _E;
-class _D {}
-class _E {}
-''');
-    var library = await buildLibrary('export "a.dart";');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@class::C
-  exportNamespace
-    C: package:test/a.dart::<fragment>::@class::C
-''');
-  }
-
-  test_export_configurations_useDefault() async {
-    declaredVariables = {
-      'dart.library.io': 'false',
-    };
-    addSource('$testPackageLibPath/foo.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
-    var library = await buildLibrary(r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/foo.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/foo.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-    exported[(0, 0)] package:test/foo.dart::<fragment>::@class::A
-  exportNamespace
-    A: package:test/foo.dart::<fragment>::@class::A
-''');
-    expect(library.libraryExports[0].exportedLibrary!.source.shortName,
-        'foo.dart');
-  }
-
-  test_export_configurations_useFirst() async {
-    declaredVariables = {
-      'dart.library.io': 'true',
-      'dart.library.html': 'true',
-    };
-    addSource('$testPackageLibPath/foo.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
-    var library = await buildLibrary(r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/foo_io.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/foo_io.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-    exported[(0, 0)] package:test/foo_io.dart::<fragment>::@class::A
-  exportNamespace
-    A: package:test/foo_io.dart::<fragment>::@class::A
-''');
-    expect(library.libraryExports[0].exportedLibrary!.source.shortName,
-        'foo_io.dart');
-  }
-
-  test_export_configurations_useSecond() async {
-    declaredVariables = {
-      'dart.library.io': 'false',
-      'dart.library.html': 'true',
-    };
-    addSource('$testPackageLibPath/foo.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
-    var library = await buildLibrary(r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/foo_html.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/foo_html.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-    exported[(0, 0)] package:test/foo_html.dart::<fragment>::@class::A
-  exportNamespace
-    A: package:test/foo_html.dart::<fragment>::@class::A
-''');
-    var export = library.libraryExports[0];
-    expect(export.exportedLibrary!.source.shortName, 'foo_html.dart');
-  }
-
-  test_export_cycle() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-export 'test.dart';
-class A {}
-''');
-
-    var library = await buildLibrary(r'''
-export 'a.dart';
-class X {}
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class X @23
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@class::A
-    declared <testLibraryFragment>::@class::X
-  exportNamespace
-    A: package:test/a.dart::<fragment>::@class::A
-    X: <testLibraryFragment>::@class::X
-''');
-  }
-
-  test_export_function() async {
-    addSource('$testPackageLibPath/a.dart', 'f() {}');
-    var library = await buildLibrary('export "a.dart";');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@function::f
-  exportNamespace
-    f: package:test/a.dart::<fragment>::@function::f
-''');
-  }
-
-  test_export_getter() async {
-    addSource('$testPackageLibPath/a.dart', 'get f() => null;');
-    var library = await buildLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_export_hide() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class A {}
-class B {}
-class C {}
-class D {}
-''');
-    var library = await buildLibrary(r'''
-export 'a.dart' hide A, C;
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      combinators
-        hide: A, C
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          combinators
-            hide: A, C
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@class::B
-    exported[(0, 0)] package:test/a.dart::<fragment>::@class::D
-  exportNamespace
-    B: package:test/a.dart::<fragment>::@class::B
-    D: package:test/a.dart::<fragment>::@class::D
-''');
-  }
-
-  test_export_multiple_combinators() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class A {}
-class B {}
-class C {}
-class D {}
-''');
-    var library = await buildLibrary(r'''
-export 'a.dart' hide A show C;
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      combinators
-        hide: A
-        show: C
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          combinators
-            hide: A
-            show: C
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@class::C
-  exportNamespace
-    C: package:test/a.dart::<fragment>::@class::C
-''');
-  }
-
-  test_export_reexport() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class A {}
-''');
-
-    addSource('$testPackageLibPath/b.dart', r'''
-export 'a.dart';
-class B {}
-''');
-
-    addSource('$testPackageLibPath/c.dart', r'''
-export 'a.dart';
-class C {}
-''');
-
-    var library = await buildLibrary(r'''
-export 'b.dart';
-export 'c.dart';
-class X {}
-''');
-
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    package:test/c.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        package:test/c.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class X @40
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-  exportedReferences
-    exported[(0, 0), (0, 1)] package:test/a.dart::<fragment>::@class::A
-    exported[(0, 0)] package:test/b.dart::<fragment>::@class::B
-    exported[(0, 1)] package:test/c.dart::<fragment>::@class::C
-    declared <testLibraryFragment>::@class::X
-  exportNamespace
-    A: package:test/a.dart::<fragment>::@class::A
-    B: package:test/b.dart::<fragment>::@class::B
-    C: package:test/c.dart::<fragment>::@class::C
-    X: <testLibraryFragment>::@class::X
-''');
-  }
-
-  test_export_setter() async {
-    addSource('$testPackageLibPath/a.dart', 'void set f(value) {}');
-    var library = await buildLibrary('export "a.dart";');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@setter::f
-  exportNamespace
-    f=: package:test/a.dart::<fragment>::@setter::f
-''');
-  }
-
-  test_export_show() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class A {}
-class B {}
-class C {}
-class D {}
-''');
-    var library = await buildLibrary(r'''
-export 'a.dart' show A, C;
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      combinators
-        show: A, C
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          combinators
-            show: A, C
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@class::A
-    exported[(0, 0)] package:test/a.dart::<fragment>::@class::C
-  exportNamespace
-    A: package:test/a.dart::<fragment>::@class::A
-    C: package:test/a.dart::<fragment>::@class::C
-''');
-  }
-
-  test_export_show_getter_setter() async {
-    addSource('$testPackageLibPath/a.dart', '''
-get f => null;
-void set f(value) {}
-''');
-    var library = await buildLibrary('export "a.dart" show f;');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      combinators
-        show: f
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          combinators
-            show: f
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@getter::f
-    exported[(0, 0)] package:test/a.dart::<fragment>::@setter::f
-  exportNamespace
-    f: package:test/a.dart::<fragment>::@getter::f
-    f=: package:test/a.dart::<fragment>::@setter::f
-''');
-  }
-
-  test_export_typedef() async {
-    addSource('$testPackageLibPath/a.dart', 'typedef F();');
-    var library = await buildLibrary('export "a.dart";');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@typeAlias::F
-  exportNamespace
-    F: package:test/a.dart::<fragment>::@typeAlias::F
-''');
-  }
-
-  test_export_uri() async {
-    var library = await buildLibrary('''
-export 'foo.dart';
-''');
-
-    var uri = library.libraryExports[0].uri as DirectiveUriWithLibrary;
-    expect(uri.relativeUriString, 'foo.dart');
-  }
-
-  test_export_variable() async {
-    addSource('$testPackageLibPath/a.dart', 'var x;');
-    var library = await buildLibrary('export "a.dart";');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@getter::x
-    exported[(0, 0)] package:test/a.dart::<fragment>::@setter::x
-  exportNamespace
-    x: package:test/a.dart::<fragment>::@getter::x
-    x=: package:test/a.dart::<fragment>::@setter::x
-''');
-  }
-
-  test_export_variable_const() async {
-    addSource('$testPackageLibPath/a.dart', 'const x = 0;');
-    var library = await buildLibrary('export "a.dart";');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@getter::x
-  exportNamespace
-    x: package:test/a.dart::<fragment>::@getter::x
-''');
-  }
-
-  test_export_variable_final() async {
-    addSource('$testPackageLibPath/a.dart', 'final x = 0;');
-    var library = await buildLibrary('export "a.dart";');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-    exported[(0, 0)] package:test/a.dart::<fragment>::@getter::x
-  exportNamespace
-    x: package:test/a.dart::<fragment>::@getter::x
-''');
-  }
-
-  test_exportImport_configurations_useDefault() async {
-    declaredVariables = {
-      'dart.library.io': 'false',
-    };
-    addSource('$testPackageLibPath/foo.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
-    addSource('$testPackageLibPath/bar.dart', r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    var library = await buildLibrary(r'''
-import 'bar.dart';
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/bar.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/bar.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class B @25
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: package:test/foo.dart::<fragment>::@class::A::@constructor::new
-''');
-    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo.dart');
-  }
-
-  test_exportImport_configurations_useFirst() async {
-    declaredVariables = {
-      'dart.library.io': 'true',
-      'dart.library.html': 'false',
-    };
-    addSource('$testPackageLibPath/foo.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
-    addSource('$testPackageLibPath/bar.dart', r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    var library = await buildLibrary(r'''
-import 'bar.dart';
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/bar.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/bar.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class B @25
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: package:test/foo_io.dart::<fragment>::@class::A::@constructor::new
-''');
-    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_io.dart');
-  }
-
-  test_exportImport_configurations_useSecond() async {
-    declaredVariables = {
-      'dart.library.io': 'false',
-      'dart.library.html': 'true',
-    };
-    addSource('$testPackageLibPath/foo.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
-    addSource('$testPackageLibPath/bar.dart', r'''
-export 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-''');
-    var library = await buildLibrary(r'''
-import 'bar.dart';
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/bar.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/bar.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class B @25
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: package:test/foo_html.dart::<fragment>::@class::A::@constructor::new
-''');
-    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_html.dart');
-  }
-
-  test_exports() async {
-    addSource('$testPackageLibPath/a.dart', 'library a;');
-    addSource('$testPackageLibPath/b.dart', 'library b;');
-    var library = await buildLibrary('export "a.dart"; export "b.dart";');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-  exportedReferences
-  exportNamespace
-''');
-  }
-
-  test_exportScope_augmentation_class() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment class A {}
-class B {}
-''');
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {}
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          augmented
-            constructors
-              <testLibraryFragment>::@class::A::@constructor::new
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@class::A
-        class B @54
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
-  exportedReferences
-    declared <testLibrary>::@fragment::package:test/a.dart::@class::B
-    declared <testLibraryFragment>::@class::A
-  exportNamespace
-    A: <testLibraryFragment>::@class::A
-    B: <testLibrary>::@fragment::package:test/a.dart::@class::B
-''');
-  }
-
-  test_exportScope_augmentation_export() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {}
-''');
-    newFile('$testPackageLibPath/b.dart', r'''
-class B1 {}
-class B2 {}
-''');
-    newFile('$testPackageLibPath/c.dart', r'''
-class C {}
-''');
-    newFile('$testPackageLibPath/d.dart', r'''
-augment library 'test.dart';
-export 'a.dart';
-''');
-    newFile('$testPackageLibPath/e.dart', r'''
-augment library 'test.dart';
-export 'b.dart';
-export 'c.dart';
-''');
-    var library = await buildLibrary(r'''
-import augment 'd.dart';
-import augment 'e.dart';
-class X {}
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/d.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/d.dart
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/d.dart
-      definingUnit: <testLibrary>::@fragment::package:test/d.dart
-    package:test/e.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/e.dart
-      libraryExports
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/e.dart
-        package:test/c.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/e.dart
-      definingUnit: <testLibrary>::@fragment::package:test/e.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class X @56
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-    <testLibrary>::@fragment::package:test/d.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/d.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/d.dart
-    <testLibrary>::@fragment::package:test/e.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/e.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryExports
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/e.dart
-        package:test/c.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/e.dart
-  exportedReferences
-    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A
-    exported[(2, 0)] package:test/b.dart::<fragment>::@class::B1
-    exported[(2, 0)] package:test/b.dart::<fragment>::@class::B2
-    exported[(2, 1)] package:test/c.dart::<fragment>::@class::C
-    declared <testLibraryFragment>::@class::X
-  exportNamespace
-    A: package:test/a.dart::<fragment>::@class::A
-    B1: package:test/b.dart::<fragment>::@class::B1
-    B2: package:test/b.dart::<fragment>::@class::B2
-    C: package:test/c.dart::<fragment>::@class::C
-    X: <testLibraryFragment>::@class::X
-''');
-  }
-
-  test_exportScope_augmentation_export_hide() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A1 {}
-class A2 {}
-class A3 {}
-class A4 {}
-''');
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-export 'a.dart' hide A2, A4;
-''');
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-class X {}
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-          combinators
-            hide: A2, A4
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class X @31
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-          combinators
-            hide: A2, A4
-  exportedReferences
-    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A1
-    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A3
-    declared <testLibraryFragment>::@class::X
-  exportNamespace
-    A1: package:test/a.dart::<fragment>::@class::A1
-    A3: package:test/a.dart::<fragment>::@class::A3
-    X: <testLibraryFragment>::@class::X
-''');
-  }
-
-  test_exportScope_augmentation_export_show() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A1 {}
-class A2 {}
-class A3 {}
-''');
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-export 'a.dart' show A1, A3;
-''');
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-class X {}
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-          combinators
-            show: A1, A3
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class X @31
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-          combinators
-            show: A1, A3
-  exportedReferences
-    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A1
-    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A3
-    declared <testLibraryFragment>::@class::X
-  exportNamespace
-    A1: package:test/a.dart::<fragment>::@class::A1
-    A3: package:test/a.dart::<fragment>::@class::A3
-    X: <testLibraryFragment>::@class::X
-''');
-  }
-
-  test_exportScope_augmentation_mixin() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {}
-mixin B {}
-''');
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {}
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          augmented
-            superclassConstraints
-              Object
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-        mixin B @54
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::B
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          superclassConstraints
-            Object
-  exportedReferences
-    declared <testLibrary>::@fragment::package:test/a.dart::@mixin::B
-    declared <testLibraryFragment>::@mixin::A
-  exportNamespace
-    A: <testLibraryFragment>::@mixin::A
-    B: <testLibrary>::@fragment::package:test/a.dart::@mixin::B
-''');
-  }
-
-  test_exportScope_augmentation_nested_class() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-class A {}
-''');
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-class B {}
-''');
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class C {}
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @31
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class A @60
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        class B @32
-          reference: <testLibrary>::@fragment::package:test/b.dart::@class::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/b.dart::@class::B::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::B
-  exportedReferences
-    declared <testLibrary>::@fragment::package:test/a.dart::@class::A
-    declared <testLibrary>::@fragment::package:test/b.dart::@class::B
-    declared <testLibraryFragment>::@class::C
-  exportNamespace
-    A: <testLibrary>::@fragment::package:test/a.dart::@class::A
-    B: <testLibrary>::@fragment::package:test/b.dart::@class::B
-    C: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_exportScope_augmentation_nested_export() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {}
-''');
-    newFile('$testPackageLibPath/b.dart', r'''
-class B {}
-''');
-    newFile('$testPackageLibPath/c.dart', r'''
-augment library 'test.dart';
-import augment 'd.dart';
-export 'a.dart';
-''');
-    newFile('$testPackageLibPath/d.dart', r'''
-augment library 'c.dart';
-export 'b.dart';
-''');
-    var library = await buildLibrary(r'''
-import augment 'c.dart';
-class X {}
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/c.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/c.dart
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/c.dart
-      definingUnit: <testLibrary>::@fragment::package:test/c.dart
-      augmentationImports
-        package:test/d.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/c.dart
-          reference: <testLibrary>::@augmentation::package:test/d.dart
-          libraryExports
-            package:test/b.dart
-              enclosingElement: <testLibrary>
-              enclosingElement3: <testLibrary>::@fragment::package:test/d.dart
-          definingUnit: <testLibrary>::@fragment::package:test/d.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class X @31
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-    <testLibrary>::@fragment::package:test/c.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/c.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/c.dart
-    <testLibrary>::@fragment::package:test/d.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/d.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/c.dart
-      libraryExports
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/d.dart
-  exportedReferences
-    exported[(1, 0)] package:test/a.dart::<fragment>::@class::A
-    exported[(2, 0)] package:test/b.dart::<fragment>::@class::B
-    declared <testLibraryFragment>::@class::X
-  exportNamespace
-    A: package:test/a.dart::<fragment>::@class::A
-    B: package:test/b.dart::<fragment>::@class::B
-    X: <testLibraryFragment>::@class::X
-''');
-  }
-
-  test_exportScope_augmentation_variable() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-int a = 0;
-''');
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static a @33
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::a
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get a @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::a
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-        synthetic static set a= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::a
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _a @-1
-              type: int
-          returnType: void
-  exportedReferences
-    declared <testLibrary>::@fragment::package:test/a.dart::@getter::a
-    declared <testLibrary>::@fragment::package:test/a.dart::@setter::a
-  exportNamespace
-    a: <testLibrary>::@fragment::package:test/a.dart::@getter::a
-    a=: <testLibrary>::@fragment::package:test/a.dart::@setter::a
-''');
-  }
-
-  test_exportScope_augmentation_variable_const() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-const a = 0;
-''');
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const a @35
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::a
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @39
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::a
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-  exportedReferences
-    declared <testLibrary>::@fragment::package:test/a.dart::@getter::a
-  exportNamespace
-    a: <testLibrary>::@fragment::package:test/a.dart::@getter::a
-''');
-  }
-
-  test_expr_invalid_typeParameter_asPrefix() async {
-    var library = await buildLibrary('''
-class C<T> {
-  final f = T.k;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          fields
-            final f @21
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: InvalidType
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: InvalidType
-''');
-  }
-
-  test_extension_documented_tripleSlash() async {
-    var library = await buildLibrary('''
-/// aaa
-/// bbbb
-/// cc
-extension E on int {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        E @34
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// aaa\n/// bbbb\n/// cc
-          extendedType: int
-''');
-  }
-
-  test_extension_field_inferredType_const() async {
-    var library = await buildLibrary('''
-extension E on int {
-  static const x = 0;
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        E @10
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          fields
-            static const x @36
-              reference: <testLibraryFragment>::@extension::E::@field::x
-              enclosingElement: <testLibraryFragment>::@extension::E
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @40
-                  staticType: int
-          accessors
-            synthetic static get x @-1
-              reference: <testLibraryFragment>::@extension::E::@getter::x
-              enclosingElement: <testLibraryFragment>::@extension::E
-              returnType: int
-''');
-  }
-
-  test_extension_typeParameters_hasBound() async {
-    var library = await buildLibrary('''
-extension E<T extends num> on int {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        E @10
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @12
-              bound: num
-              defaultType: num
-          extendedType: int
-''');
-  }
-
-  test_extension_typeParameters_noBound() async {
-    var library = await buildLibrary('''
-extension E<T> on int {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        E @10
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @12
-              defaultType: dynamic
-          extendedType: int
-''');
-  }
-
-  test_function_async() async {
-    var library = await buildLibrary(r'''
-import 'dart:async';
-Future f() async {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      functions
-        f @28 async
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: Future<dynamic>
-''');
-  }
-
-  test_function_asyncStar() async {
-    var library = await buildLibrary(r'''
-import 'dart:async';
-Stream f() async* {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      functions
-        f @28 async*
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: Stream<dynamic>
-''');
-  }
-
-  test_function_documented() async {
-    var library = await buildLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-f() {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @60
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * Docs\n */
-          returnType: dynamic
-''');
-  }
-
-  test_function_entry_point() async {
-    var library = await buildLibrary('main() {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        main @0
-          reference: <testLibraryFragment>::@function::main
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_function_entry_point_in_export() async {
-    addSource('$testPackageLibPath/a.dart', 'library a; main() {}');
-    var library = await buildLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_function_entry_point_in_export_hidden() async {
-    addSource('$testPackageLibPath/a.dart', 'library a; main() {}');
-    var library = await buildLibrary('export "a.dart" hide main;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      combinators
-        hide: main
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          combinators
-            hide: main
-''');
-  }
-
-  test_function_entry_point_in_part() async {
-    addSource('$testPackageLibPath/a.dart', 'part of my.lib; main() {}');
-    var library = await buildLibrary('library my.lib; part "a.dart";');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      functions
-        main @16
-          reference: <testLibrary>::@fragment::package:test/a.dart::@function::main
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: dynamic
-''');
-  }
-
-  test_function_external() async {
-    var library = await buildLibrary('external f();');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        external f @9
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_function_hasImplicitReturnType_false() async {
-    var library = await buildLibrary('''
-int f() => 0;
-''');
-    var f = library.definingCompilationUnit.functions.single;
-    expect(f.hasImplicitReturnType, isFalse);
-  }
-
-  test_function_hasImplicitReturnType_true() async {
-    var library = await buildLibrary('''
-f() => 0;
-''');
-    var f = library.definingCompilationUnit.functions.single;
-    expect(f.hasImplicitReturnType, isTrue);
-  }
-
-  test_function_parameter_const() async {
-    var library = await buildLibrary('''
-void f(const x) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional x @13
-              type: dynamic
-          returnType: void
-''');
-  }
-
-  test_function_parameter_fieldFormal() async {
-    var library = await buildLibrary('''
-void f(int this.a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional final this.a @16
-              type: int
-              field: <null>
-          returnType: void
-''');
-  }
-
-  test_function_parameter_fieldFormal_default() async {
-    var library = await buildLibrary('''
-void f({int this.a: 42}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalNamed default final this.a @17
-              reference: <testLibraryFragment>::@function::f::@parameter::a
-              type: int
-              constantInitializer
-                IntegerLiteral
-                  literal: 42 @20
-                  staticType: int
-              field: <null>
-          returnType: void
-''');
-  }
-
-  test_function_parameter_fieldFormal_functionTyped() async {
-    var library = await buildLibrary('''
-void f(int this.a(int b)) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional final this.a @16
-              type: int Function(int)
-              parameters
-                requiredPositional b @22
-                  type: int
-              field: <null>
-          returnType: void
-''');
-  }
-
-  test_function_parameter_final() async {
-    var library = await buildLibrary('f(final x) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional final x @8
-              type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_function_parameter_kind_named() async {
-    var library = await buildLibrary('f({x}) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalNamed default x @3
-              reference: <testLibraryFragment>::@function::f::@parameter::x
-              type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_function_parameter_kind_positional() async {
-    var library = await buildLibrary('f([x]) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalPositional default x @3
-              type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_function_parameter_kind_required() async {
-    var library = await buildLibrary('f(x) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional x @2
-              type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_function_parameter_parameters() async {
-    var library = await buildLibrary('f(g(x, y)) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          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 buildLibrary('f(int g()) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional g @6
-              type: int Function()
-          returnType: dynamic
-''');
-  }
-
-  test_function_parameter_return_type_void() async {
-    var library = await buildLibrary('f(void g()) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional g @7
-              type: void Function()
-          returnType: dynamic
-''');
-  }
-
-  test_function_parameter_type() async {
-    var library = await buildLibrary('f(int i) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional i @6
-              type: int
-          returnType: dynamic
-''');
-  }
-
-  test_function_parameter_type_typeParameter() async {
-    var library = await buildLibrary('''
-void f<T>(T a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-          parameters
-            requiredPositional a @12
-              type: T
-          returnType: void
-''');
-  }
-
-  test_function_parameter_type_unresolved() async {
-    var library = await buildLibrary(r'''
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @9
-              type: InvalidType
-          returnType: void
-''');
-  }
-
-  test_function_parameters() async {
-    var library = await buildLibrary('f(x, y) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional x @2
-              type: dynamic
-            requiredPositional y @5
-              type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_function_return_type_implicit() async {
-    var library = await buildLibrary('f() => null;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_function_return_type_unresolved() async {
-    var library = await buildLibrary(r'''
-A f() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @2
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-''');
-  }
-
-  test_function_return_type_void() async {
-    var library = await buildLibrary('void f() {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: void
-''');
-  }
-
-  test_function_returnType() async {
-    var library = await buildLibrary('''
-int f() => 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @4
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_function_returnType_typeParameter() async {
-    var library = await buildLibrary('''
-T f<T>() => throw 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @2
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @4
-              defaultType: dynamic
-          returnType: T
-''');
-  }
-
-  test_function_type_parameter_with_function_typed_parameter() async {
-    var library = await buildLibrary('void f<T, U>(T x(U u)) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-            covariant U @10
-              defaultType: dynamic
-          parameters
-            requiredPositional x @15
-              type: T Function(U)
-              parameters
-                requiredPositional u @19
-                  type: U
-          returnType: void
-''');
-  }
-
-  test_function_typed_parameter_implicit() async {
-    var library = await buildLibrary('f(g()) => null;');
-    expect(
-        library
-            .definingCompilationUnit.functions[0].parameters[0].hasImplicitType,
-        isFalse);
-  }
-
-  test_function_typeParameters_hasBound() async {
-    var library = await buildLibrary('''
-void f<T extends num>() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              bound: num
-              defaultType: num
-          returnType: void
-''');
-  }
-
-  test_function_typeParameters_noBound() async {
-    var library = await buildLibrary('''
-void f<T>() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-          returnType: void
-''');
-  }
-
-  test_functions() async {
-    var library = await buildLibrary('f() {} g() {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        g @7
-          reference: <testLibraryFragment>::@function::g
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_functionTypeAlias_enclosingElements() async {
-    var library = await buildLibrary(r'''
-typedef void F<T>(int a);
-''');
-    var unit = library.definingCompilationUnit;
-
-    var F = unit.typeAliases[0];
-    expect(F.name, 'F');
-
-    var T = F.typeParameters[0];
-    expect(T.name, 'T');
-    expect(T.enclosingElement, same(F));
-
-    var function = F.aliasedElement as GenericFunctionTypeElement;
-    expect(function.enclosingElement, same(F));
-
-    var a = function.parameters[0];
-    expect(a.name, 'a');
-    expect(a.enclosingElement, same(function));
-  }
-
-  test_functionTypeAlias_type_element() async {
-    var library = await buildLibrary(r'''
-typedef T F<T>();
-F<int> a;
-''');
-    var unit = library.definingCompilationUnit;
-    var type = unit.topLevelVariables[0].type as FunctionType;
-
-    expect(type.alias!.element, same(unit.typeAliases[0]));
-    _assertTypeStrings(type.alias!.typeArguments, ['int']);
-  }
-
-  test_functionTypeAlias_typeParameters_variance_contravariant() async {
-    var library = await buildLibrary(r'''
-typedef void F<T>(T a);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @15
-              defaultType: dynamic
-          aliasedType: void Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @20
-                type: T
-            returnType: void
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_contravariant2() async {
-    var library = await buildLibrary(r'''
-typedef void F1<T>(T a);
-typedef F1<T> F2<T>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F1 @13
-          reference: <testLibraryFragment>::@typeAlias::F1
-          typeParameters
-            contravariant T @16
-              defaultType: dynamic
-          aliasedType: void Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @21
-                type: T
-            returnType: void
-        functionTypeAliasBased F2 @39
-          reference: <testLibraryFragment>::@typeAlias::F2
-          typeParameters
-            contravariant T @42
-              defaultType: dynamic
-          aliasedType: void Function(T) Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void Function(T)
-              alias: <testLibraryFragment>::@typeAlias::F1
-                typeArguments
-                  T
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_contravariant3() async {
-    var library = await buildLibrary(r'''
-typedef F1<T> F2<T>();
-typedef void F1<T>(T a);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F2 @14
-          reference: <testLibraryFragment>::@typeAlias::F2
-          typeParameters
-            contravariant T @17
-              defaultType: dynamic
-          aliasedType: void Function(T) Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void Function(T)
-              alias: <testLibraryFragment>::@typeAlias::F1
-                typeArguments
-                  T
-        functionTypeAliasBased F1 @36
-          reference: <testLibraryFragment>::@typeAlias::F1
-          typeParameters
-            contravariant T @39
-              defaultType: dynamic
-          aliasedType: void Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @44
-                type: T
-            returnType: void
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_covariant() async {
-    var library = await buildLibrary(r'''
-typedef T F<T>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @10
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            covariant T @12
-              defaultType: dynamic
-          aliasedType: T Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: T
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_covariant2() async {
-    var library = await buildLibrary(r'''
-typedef List<T> F<T>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @16
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            covariant T @18
-              defaultType: dynamic
-          aliasedType: List<T> Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: List<T>
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_covariant3() async {
-    var library = await buildLibrary(r'''
-typedef T F1<T>();
-typedef F1<T> F2<T>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F1 @10
-          reference: <testLibraryFragment>::@typeAlias::F1
-          typeParameters
-            covariant T @13
-              defaultType: dynamic
-          aliasedType: T Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: T
-        functionTypeAliasBased F2 @33
-          reference: <testLibraryFragment>::@typeAlias::F2
-          typeParameters
-            covariant T @36
-              defaultType: dynamic
-          aliasedType: T Function() Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: T Function()
-              alias: <testLibraryFragment>::@typeAlias::F1
-                typeArguments
-                  T
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_covariant4() async {
-    var library = await buildLibrary(r'''
-typedef void F1<T>(T a);
-typedef void F2<T>(F1<T> a);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F1 @13
-          reference: <testLibraryFragment>::@typeAlias::F1
-          typeParameters
-            contravariant T @16
-              defaultType: dynamic
-          aliasedType: void Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @21
-                type: T
-            returnType: void
-        functionTypeAliasBased F2 @38
-          reference: <testLibraryFragment>::@typeAlias::F2
-          typeParameters
-            covariant T @41
-              defaultType: dynamic
-          aliasedType: void Function(void Function(T))
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @50
-                type: void Function(T)
-                  alias: <testLibraryFragment>::@typeAlias::F1
-                    typeArguments
-                      T
-            returnType: void
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_invariant() async {
-    var library = await buildLibrary(r'''
-typedef T F<T>(T a);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @10
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            invariant T @12
-              defaultType: dynamic
-          aliasedType: T Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @17
-                type: T
-            returnType: T
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_invariant2() async {
-    var library = await buildLibrary(r'''
-typedef T F1<T>();
-typedef F1<T> F2<T>(T a);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F1 @10
-          reference: <testLibraryFragment>::@typeAlias::F1
-          typeParameters
-            covariant T @13
-              defaultType: dynamic
-          aliasedType: T Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: T
-        functionTypeAliasBased F2 @33
-          reference: <testLibraryFragment>::@typeAlias::F2
-          typeParameters
-            invariant T @36
-              defaultType: dynamic
-          aliasedType: T Function() Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @41
-                type: T
-            returnType: T Function()
-              alias: <testLibraryFragment>::@typeAlias::F1
-                typeArguments
-                  T
-''');
-  }
-
-  test_functionTypeAlias_typeParameters_variance_unrelated() async {
-    var library = await buildLibrary(r'''
-typedef void F<T>(int a);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated T @15
-              defaultType: dynamic
-          aliasedType: void Function(int)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @22
-                type: int
-            returnType: void
-''');
-  }
-
-  test_futureOr() async {
-    var library = await buildLibrary('import "dart:async"; FutureOr<int> x;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static x @35
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: FutureOr<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: FutureOr<int>
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: FutureOr<int>
-          returnType: void
-''');
-    var variables = library.definingCompilationUnit.topLevelVariables;
-    expect(variables, hasLength(1));
-    _assertTypeStr(variables[0].type, 'FutureOr<int>');
-  }
-
-  test_futureOr_const() async {
-    var library =
-        await buildLibrary('import "dart:async"; const x = FutureOr;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static const x @27
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            SimpleIdentifier
-              token: FutureOr @31
-              staticElement: dart:async::<fragment>::@class::FutureOr
-              staticType: Type
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-''');
-    var variables = library.definingCompilationUnit.topLevelVariables;
-    expect(variables, hasLength(1));
-    var x = variables[0] as ConstTopLevelVariableElementImpl;
-    _assertTypeStr(x.type, 'Type');
-    expect(x.constantInitializer.toString(), 'FutureOr');
-  }
-
-  test_futureOr_inferred() async {
-    var library = await buildLibrary('''
-import "dart:async";
-FutureOr<int> f() => null;
-var x = f();
-var y = x.then((z) => z.asDouble());
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static x @52
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: FutureOr<int>
-          shouldUseTypeForInitializerInference: false
-        static y @65
-          reference: <testLibraryFragment>::@topLevelVariable::y
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: FutureOr<int>
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: FutureOr<int>
-          returnType: void
-        synthetic static get y @-1
-          reference: <testLibraryFragment>::@getter::y
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-        synthetic static set y= @-1
-          reference: <testLibraryFragment>::@setter::y
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _y @-1
-              type: InvalidType
-          returnType: void
-      functions
-        f @35
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: FutureOr<int>
-''');
-    var variables = library.definingCompilationUnit.topLevelVariables;
-    expect(variables, hasLength(2));
-    var x = variables[0];
-    expect(x.name, 'x');
-    var y = variables[1];
-    expect(y.name, 'y');
-    _assertTypeStr(x.type, 'FutureOr<int>');
-    _assertTypeStr(y.type, 'InvalidType');
-  }
-
-  test_generic_function_type_nullability_none() async {
-    var library = await buildLibrary('''
-void Function() f;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static f @16
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: void Function()
-      accessors
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: void Function()
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: void Function()
-          returnType: void
-''');
-  }
-
-  test_generic_function_type_nullability_question() async {
-    var library = await buildLibrary('''
-void Function()? f;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static f @17
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: void Function()?
-      accessors
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: void Function()?
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: void Function()?
-          returnType: void
-''');
-  }
-
-  test_generic_gClass_gMethodStatic() async {
-    var library = await buildLibrary('''
-class C<T, U> {
-  static void m<V, W>(V v, W w) {
-    void f<X, Y>(V v, W w, X x, Y y) {
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            static m @30
-              reference: <testLibraryFragment>::@class::C::@method::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              typeParameters
-                covariant V @32
-                  defaultType: dynamic
-                covariant W @35
-                  defaultType: dynamic
-              parameters
-                requiredPositional v @40
-                  type: V
-                requiredPositional w @45
-                  type: W
-              returnType: void
-''');
-  }
-
-  test_genericFunction_asFunctionReturnType() async {
-    var library = await buildLibrary(r'''
-int Function(int a, String b) f() => null;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @30
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function(int, String)
-''');
-  }
-
-  test_genericFunction_asFunctionTypedParameterReturnType() async {
-    var library = await buildLibrary(r'''
-void f(int Function(int a, String b) p(num c)) => null;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional p @37
-              type: int Function(int, String) Function(num)
-              parameters
-                requiredPositional c @43
-                  type: num
-          returnType: void
-''');
-  }
-
-  test_genericFunction_asGenericFunctionReturnType() async {
-    var library = await buildLibrary(r'''
-typedef F = void Function(String a) Function(int b);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function(String) Function(int)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional b @49
-                type: int
-            returnType: void Function(String)
-''');
-  }
-
-  test_genericFunction_asMethodReturnType() async {
-    var library = await buildLibrary(r'''
-class C {
-  int Function(int a, String b) m() => null;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            m @42
-              reference: <testLibraryFragment>::@class::C::@method::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int Function(int, String)
-''');
-  }
-
-  test_genericFunction_asParameterType() async {
-    var library = await buildLibrary(r'''
-void f(int Function(int a, String b) p) => null;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional p @37
-              type: int Function(int, String)
-          returnType: void
-''');
-  }
-
-  test_genericFunction_asTopLevelVariableType() async {
-    var library = await buildLibrary(r'''
-int Function(int a, String b) v;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static v @30
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int Function(int, String)
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function(int, String)
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: int Function(int, String)
-          returnType: void
-''');
-  }
-
-  test_genericFunction_asTypeArgument_ofAnnotation_class() async {
-    var library = await buildLibrary(r'''
-class A<T> {
-  const A();
-}
-
-@A<int Function(String a)>()
-class B {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @64
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @29
-              name: SimpleIdentifier
-                token: A @30
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              typeArguments: TypeArgumentList
-                leftBracket: < @31
-                arguments
-                  GenericFunctionType
-                    returnType: NamedType
-                      name: int @32
-                      element: dart:core::<fragment>::@class::int
-                      type: int
-                    functionKeyword: Function @36
-                    parameters: FormalParameterList
-                      leftParenthesis: ( @44
-                      parameter: SimpleFormalParameter
-                        type: NamedType
-                          name: String @45
-                          element: dart:core::<fragment>::@class::String
-                          type: String
-                        name: a @52
-                        declaredElement: a@52
-                          type: String
-                      rightParenthesis: ) @53
-                    declaredElement: GenericFunctionTypeElement
-                      parameters
-                        a
-                          kind: required positional
-                          type: String
-                      returnType: int
-                      type: int Function(String)
-                    type: int Function(String)
-                rightBracket: > @54
-              arguments: ArgumentList
-                leftParenthesis: ( @55
-                rightParenthesis: ) @56
-              element: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: int Function(String)}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-''');
-  }
-
-  test_genericFunction_asTypeArgument_ofAnnotation_topLevelVariable() async {
-    var library = await buildLibrary(r'''
-class A<T> {
-  const A();
-}
-
-@A<int Function(String a)>()
-var v = 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      topLevelVariables
-        static v @62
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @29
-              name: SimpleIdentifier
-                token: A @30
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              typeArguments: TypeArgumentList
-                leftBracket: < @31
-                arguments
-                  GenericFunctionType
-                    returnType: NamedType
-                      name: int @32
-                      element: dart:core::<fragment>::@class::int
-                      type: int
-                    functionKeyword: Function @36
-                    parameters: FormalParameterList
-                      leftParenthesis: ( @44
-                      parameter: SimpleFormalParameter
-                        type: NamedType
-                          name: String @45
-                          element: dart:core::<fragment>::@class::String
-                          type: String
-                        name: a @52
-                        declaredElement: a@52
-                          type: String
-                      rightParenthesis: ) @53
-                    declaredElement: GenericFunctionTypeElement
-                      parameters
-                        a
-                          kind: required positional
-                          type: String
-                      returnType: int
-                      type: int Function(String)
-                    type: int Function(String)
-                rightBracket: > @54
-              arguments: ArgumentList
-                leftParenthesis: ( @55
-                rightParenthesis: ) @56
-              element: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: int Function(String)}
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_genericFunction_asTypeArgument_parameters_optionalNamed() async {
-    var library = await buildLibrary(r'''
-class A<T> {
-  const A();
-}
-
-const v = A<String Function({int? a})>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      topLevelVariables
-        static const v @35
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: A<String Function({int? a})>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              constructorName: ConstructorName
-                type: NamedType
-                  name: A @39
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @40
-                    arguments
-                      GenericFunctionType
-                        returnType: NamedType
-                          name: String @41
-                          element: dart:core::<fragment>::@class::String
-                          type: String
-                        functionKeyword: Function @48
-                        parameters: FormalParameterList
-                          leftParenthesis: ( @56
-                          leftDelimiter: { @57
-                          parameter: DefaultFormalParameter
-                            parameter: SimpleFormalParameter
-                              type: NamedType
-                                name: int @58
-                                question: ? @61
-                                element: dart:core::<fragment>::@class::int
-                                type: int?
-                              name: a @63
-                              declaredElement: a@63
-                                type: int?
-                            declaredElement: a@63
-                              type: int?
-                          rightDelimiter: } @64
-                          rightParenthesis: ) @65
-                        declaredElement: GenericFunctionTypeElement
-                          parameters
-                            a
-                              kind: optional named
-                              type: int?
-                          returnType: String
-                          type: String Function({int? a})
-                        type: String Function({int? a})
-                    rightBracket: > @66
-                  element: <testLibraryFragment>::@class::A
-                  type: A<String Function({int? a})>
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::A::@constructor::new
-                  substitution: {T: String Function({int? a})}
-              argumentList: ArgumentList
-                leftParenthesis: ( @67
-                rightParenthesis: ) @68
-              staticType: A<String Function({int? a})>
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: A<String Function({int? a})>
-''');
-  }
-
-  test_genericFunction_asTypeArgument_parameters_optionalPositional() async {
-    var library = await buildLibrary(r'''
-class A<T> {
-  const A();
-}
-
-const v = A<String Function([int? a])>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      topLevelVariables
-        static const v @35
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: A<String Function([int?])>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              constructorName: ConstructorName
-                type: NamedType
-                  name: A @39
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @40
-                    arguments
-                      GenericFunctionType
-                        returnType: NamedType
-                          name: String @41
-                          element: dart:core::<fragment>::@class::String
-                          type: String
-                        functionKeyword: Function @48
-                        parameters: FormalParameterList
-                          leftParenthesis: ( @56
-                          leftDelimiter: [ @57
-                          parameter: DefaultFormalParameter
-                            parameter: SimpleFormalParameter
-                              type: NamedType
-                                name: int @58
-                                question: ? @61
-                                element: dart:core::<fragment>::@class::int
-                                type: int?
-                              name: a @63
-                              declaredElement: a@63
-                                type: int?
-                            declaredElement: a@63
-                              type: int?
-                          rightDelimiter: ] @64
-                          rightParenthesis: ) @65
-                        declaredElement: GenericFunctionTypeElement
-                          parameters
-                            a
-                              kind: optional positional
-                              type: int?
-                          returnType: String
-                          type: String Function([int?])
-                        type: String Function([int?])
-                    rightBracket: > @66
-                  element: <testLibraryFragment>::@class::A
-                  type: A<String Function([int?])>
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::A::@constructor::new
-                  substitution: {T: String Function([int?])}
-              argumentList: ArgumentList
-                leftParenthesis: ( @67
-                rightParenthesis: ) @68
-              staticType: A<String Function([int?])>
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: A<String Function([int?])>
-''');
-  }
-
-  test_genericFunction_asTypeArgument_parameters_requiredNamed() async {
-    var library = await buildLibrary(r'''
-class A<T> {
-  const A();
-}
-
-const v = A<String Function({required int a})>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      topLevelVariables
-        static const v @35
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: A<String Function({required int a})>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              constructorName: ConstructorName
-                type: NamedType
-                  name: A @39
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @40
-                    arguments
-                      GenericFunctionType
-                        returnType: NamedType
-                          name: String @41
-                          element: dart:core::<fragment>::@class::String
-                          type: String
-                        functionKeyword: Function @48
-                        parameters: FormalParameterList
-                          leftParenthesis: ( @56
-                          leftDelimiter: { @57
-                          parameter: DefaultFormalParameter
-                            parameter: SimpleFormalParameter
-                              requiredKeyword: required @58
-                              type: NamedType
-                                name: int @67
-                                element: dart:core::<fragment>::@class::int
-                                type: int
-                              name: a @71
-                              declaredElement: a@71
-                                type: int
-                            declaredElement: a@71
-                              type: int
-                          rightDelimiter: } @72
-                          rightParenthesis: ) @73
-                        declaredElement: GenericFunctionTypeElement
-                          parameters
-                            a
-                              kind: required named
-                              type: int
-                          returnType: String
-                          type: String Function({required int a})
-                        type: String Function({required int a})
-                    rightBracket: > @74
-                  element: <testLibraryFragment>::@class::A
-                  type: A<String Function({required int a})>
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::A::@constructor::new
-                  substitution: {T: String Function({required int a})}
-              argumentList: ArgumentList
-                leftParenthesis: ( @75
-                rightParenthesis: ) @76
-              staticType: A<String Function({required int a})>
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: A<String Function({required int a})>
-''');
-  }
-
-  test_genericFunction_asTypeArgument_parameters_requiredPositional() async {
-    var library = await buildLibrary(r'''
-class A<T> {
-  const A();
-}
-
-const v = A<String Function(int a)>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      topLevelVariables
-        static const v @35
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: A<String Function(int)>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              constructorName: ConstructorName
-                type: NamedType
-                  name: A @39
-                  typeArguments: TypeArgumentList
-                    leftBracket: < @40
-                    arguments
-                      GenericFunctionType
-                        returnType: NamedType
-                          name: String @41
-                          element: dart:core::<fragment>::@class::String
-                          type: String
-                        functionKeyword: Function @48
-                        parameters: FormalParameterList
-                          leftParenthesis: ( @56
-                          parameter: SimpleFormalParameter
-                            type: NamedType
-                              name: int @57
-                              element: dart:core::<fragment>::@class::int
-                              type: int
-                            name: a @61
-                            declaredElement: a@61
-                              type: int
-                          rightParenthesis: ) @62
-                        declaredElement: GenericFunctionTypeElement
-                          parameters
-                            a
-                              kind: required positional
-                              type: int
-                          returnType: String
-                          type: String Function(int)
-                        type: String Function(int)
-                    rightBracket: > @63
-                  element: <testLibraryFragment>::@class::A
-                  type: A<String Function(int)>
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::A::@constructor::new
-                  substitution: {T: String Function(int)}
-              argumentList: ArgumentList
-                leftParenthesis: ( @64
-                rightParenthesis: ) @65
-              staticType: A<String Function(int)>
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: A<String Function(int)>
-''');
-  }
-
-  test_genericFunction_boundOf_typeParameter_ofMixin() async {
-    var library = await buildLibrary(r'''
-mixin B<X extends void Function()> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin B @6
-          reference: <testLibraryFragment>::@mixin::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @8
-              bound: void Function()
-              defaultType: void Function()
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_genericFunction_typeArgument_ofSuperclass_ofClassAlias() async {
-    var library = await buildLibrary(r'''
-class A<T> {}
-mixin M {}
-class B = A<void Function()> with M;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class alias B @31
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A<void Function()>
-          mixins
-            M
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: void Function()}
-      mixins
-        mixin M @20
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_genericFunction_typeParameter_asTypedefArgument() async {
-    var library = await buildLibrary(r'''
-typedef F1 = Function<V1>(F2<V1>);
-typedef F2<V2> = V2 Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F1 @8
-          reference: <testLibraryFragment>::@typeAlias::F1
-          aliasedType: dynamic Function<V1>(V1 Function())
-          aliasedElement: GenericFunctionTypeElement
-            typeParameters
-              covariant V1 @22
-            parameters
-              requiredPositional @-1
-                type: V1 Function()
-                  alias: <testLibraryFragment>::@typeAlias::F2
-                    typeArguments
-                      V1
-            returnType: dynamic
-        F2 @43
-          reference: <testLibraryFragment>::@typeAlias::F2
-          typeParameters
-            covariant V2 @46
-              defaultType: dynamic
-          aliasedType: V2 Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: V2
-''');
-  }
-
-  test_genericTypeAlias_enclosingElements() async {
-    var library = await buildLibrary(r'''
-typedef F<T> = void Function<U>(int a);
-''');
-    var unit = library.definingCompilationUnit;
-
-    var F = unit.typeAliases[0];
-    expect(F.name, 'F');
-
-    var T = F.typeParameters[0];
-    expect(T.name, 'T');
-    expect(T.enclosingElement, same(F));
-
-    var function = F.aliasedElement as GenericFunctionTypeElement;
-    expect(function.enclosingElement, same(F));
-
-    var U = function.typeParameters[0];
-    expect(U.name, 'U');
-    expect(U.enclosingElement, same(function));
-
-    var a = function.parameters[0];
-    expect(a.name, 'a');
-    expect(a.enclosingElement, same(function));
-  }
-
-  test_genericTypeAlias_recursive() async {
-    var library = await buildLibrary('''
-typedef F<X extends F> = Function(F);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        notSimplyBounded F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated X @10
-              bound: dynamic
-              defaultType: dynamic
-          aliasedType: dynamic Function(dynamic)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional @-1
-                type: dynamic
-            returnType: dynamic
-''');
-  }
-
-  test_getter_async() async {
-    var library = await buildLibrary(r'''
-Future<int> get foo async => 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: Future<int>
-      accessors
-        static get foo @16 async
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: Future<int>
-''');
-  }
-
-  test_getter_asyncStar() async {
-    var library = await buildLibrary(r'''
-import 'dart:async';
-Stream<int> get foo async* {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: Stream<int>
-      accessors
-        static get foo @37 async*
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: Stream<int>
-''');
-  }
-
-  test_getter_documented() async {
-    var library = await buildLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-get x => null;''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        static get x @64
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * Docs\n */
-          returnType: dynamic
-''');
-  }
-
-  test_getter_external() async {
-    var library = await buildLibrary('external int get x;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static external get x @17
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_getter_inferred_type_nonStatic_implicit_return() async {
-    var library = await buildLibrary(
-        'class C extends D { get f => null; } abstract class D { int get f; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          fields
-            synthetic f @-1
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-          accessors
-            get f @24
-              reference: <testLibraryFragment>::@class::C::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-        abstract class D @52
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic f @-1
-              reference: <testLibraryFragment>::@class::D::@field::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          accessors
-            abstract get f @64
-              reference: <testLibraryFragment>::@class::D::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              returnType: int
-''');
-  }
-
-  test_getter_syncStar() async {
-    var library = await buildLibrary(r'''
-Iterator<int> get foo sync* {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: Iterator<int>
-      accessors
-        static get foo @18 sync*
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: Iterator<int>
-''');
-  }
-
-  test_getters() async {
-    var library = await buildLibrary('int get x => null; get y => null;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-        synthetic static y @-1
-          reference: <testLibraryFragment>::@topLevelVariable::y
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        static get x @8
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        static get y @23
-          reference: <testLibraryFragment>::@getter::y
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_implicitCallTearoff() async {
-    var library = await buildLibrary(r'''
-class C {
-  void call() {}
-}
-
-class D {
-  const D(C c) : this.named(c);
-
-  const D.named(void Function() f);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            call @17
-              reference: <testLibraryFragment>::@class::C::@method::call
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: void
-        class D @36
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @48
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-              parameters
-                requiredPositional c @52
-                  type: C
-              constantInitializers
-                RedirectingConstructorInvocation
-                  thisKeyword: this @57
-                  period: . @61
-                  constructorName: SimpleIdentifier
-                    token: named @62
-                    staticElement: <testLibraryFragment>::@class::D::@constructor::named
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @67
-                    arguments
-                      ImplicitCallReference
-                        expression: SimpleIdentifier
-                          token: c @68
-                          staticElement: <testLibraryFragment>::@class::D::@constructor::new::@parameter::c
-                          staticType: C
-                        staticElement: <testLibraryFragment>::@class::C::@method::call
-                        staticType: void Function()
-                    rightParenthesis: ) @69
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::named
-              redirectedConstructor: <testLibraryFragment>::@class::D::@constructor::named
-            const named @83
-              reference: <testLibraryFragment>::@class::D::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::D
-              periodOffset: 82
-              nameEnd: 88
-              parameters
-                requiredPositional f @105
-                  type: void Function()
-''');
-  }
-
-  test_implicitConstructor_named_const() async {
-    var library = await buildLibrary('''
-class C {
-  final Object x;
-  const C.named(this.x);
-}
-const x = C.named(42);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @25
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: Object
-          constructors
-            const named @38
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 37
-              nameEnd: 43
-              parameters
-                requiredPositional final this.x @49
-                  type: Object
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: Object
-      topLevelVariables
-        static const x @61
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @65
-                  element: <testLibraryFragment>::@class::C
-                  type: C
-                period: . @66
-                name: SimpleIdentifier
-                  token: named @67
-                  staticElement: <testLibraryFragment>::@class::C::@constructor::named
-                  staticType: null
-                staticElement: <testLibraryFragment>::@class::C::@constructor::named
-              argumentList: ArgumentList
-                leftParenthesis: ( @72
-                arguments
-                  IntegerLiteral
-                    literal: 42 @73
-                    staticType: int
-                rightParenthesis: ) @75
-              staticType: C
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-''');
-  }
-
-  test_implicitTopLevelVariable_getterFirst() async {
-    var library =
-        await buildLibrary('int get x => 0; void set x(int value) {}');
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-          id: variable_0
-          getter: getter_0
-          setter: setter_0
-      accessors
-        static get x @8
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_0
-          variable: variable_0
-        static set x= @25
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional value @31
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-''');
-  }
-
-  test_implicitTopLevelVariable_setterFirst() async {
-    var library =
-        await buildLibrary('void set x(int value) {} int get x => 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static set x= @9
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional value @15
-              type: int
-          returnType: void
-        static get x @33
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_import_configurations_useDefault() async {
-    declaredVariables = {
-      'dart.library.io': 'false',
-    };
-    addSource('$testPackageLibPath/foo.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
-    var library = await buildLibrary(r'''
-import 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class B @104
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: package:test/foo.dart::<fragment>::@class::A::@constructor::new
-''');
-    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo.dart');
-  }
-
-  test_import_configurations_useFirst() async {
-    declaredVariables = {
-      'dart.library.io': 'true',
-      'dart.library.html': 'true',
-    };
-    addSource('$testPackageLibPath/foo.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
-    var library = await buildLibrary(r'''
-import 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo_io.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo_io.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class B @104
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: package:test/foo_io.dart::<fragment>::@class::A::@constructor::new
-''');
-    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_io.dart');
-  }
-
-  test_import_configurations_useFirst_eqTrue() async {
-    declaredVariables = {
-      'dart.library.io': 'true',
-      'dart.library.html': 'true',
-    };
-    addSource('$testPackageLibPath/foo.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
-    var library = await buildLibrary(r'''
-import 'foo.dart'
-  if (dart.library.io == 'true') 'foo_io.dart'
-  if (dart.library.html == 'true') 'foo_html.dart';
-
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo_io.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo_io.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class B @124
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: package:test/foo_io.dart::<fragment>::@class::A::@constructor::new
-''');
-    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_io.dart');
-  }
-
-  test_import_configurations_useSecond() async {
-    declaredVariables = {
-      'dart.library.io': 'false',
-      'dart.library.html': 'true',
-    };
-    addSource('$testPackageLibPath/foo.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
-    var library = await buildLibrary(r'''
-import 'foo.dart'
-  if (dart.library.io) 'foo_io.dart'
-  if (dart.library.html) 'foo_html.dart';
-
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo_html.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo_html.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class B @104
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: package:test/foo_html.dart::<fragment>::@class::A::@constructor::new
-''');
-    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_html.dart');
-  }
-
-  test_import_configurations_useSecond_eqTrue() async {
-    declaredVariables = {
-      'dart.library.io': 'false',
-      'dart.library.html': 'true',
-    };
-    addSource('$testPackageLibPath/foo.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_io.dart', 'class A {}');
-    addSource('$testPackageLibPath/foo_html.dart', 'class A {}');
-    var library = await buildLibrary(r'''
-import 'foo.dart'
-  if (dart.library.io == 'true') 'foo_io.dart'
-  if (dart.library.html == 'true') 'foo_html.dart';
-
-class B extends A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo_html.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo_html.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class B @124
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: package:test/foo_html.dart::<fragment>::@class::A::@constructor::new
-''');
-    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
-    expect(typeA.element.source.shortName, 'foo_html.dart');
-  }
-
-  test_import_dartCore_explicit() async {
-    var library = await buildLibrary('''
-import 'dart:core';
-import 'dart:math';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:core
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    dart:math
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:core
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_import_dartCore_implicit() async {
-    var library = await buildLibrary('''
-import 'dart:math';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:math
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_import_deferred() async {
-    addSource('$testPackageLibPath/a.dart', 'f() {}');
-    var library = await buildLibrary('''
-import 'a.dart' deferred as p;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart deferred as p @28
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @28
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart deferred as p @28
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @28
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_import_export() async {
-    var library = await buildLibrary('''
-import 'dart:async' as i1;
-export 'dart:math';
-import 'dart:async' as i2;
-export 'dart:math';
-import 'dart:async' as i3;
-export 'dart:math';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async as i1 @23
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    dart:async as i2 @70
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    dart:async as i3 @117
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    i1 @23
-      reference: <testLibraryFragment>::@prefix::i1
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    i2 @70
-      reference: <testLibraryFragment>::@prefix::i2
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    i3 @117
-      reference: <testLibraryFragment>::@prefix::i3
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  libraryExports
-    dart:math
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    dart:math
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    dart:math
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async as i1 @23
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        dart:async as i2 @70
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        dart:async as i3 @117
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        i1 @23
-          reference: <testLibraryFragment>::@prefix::i1
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        i2 @70
-          reference: <testLibraryFragment>::@prefix::i2
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        i3 @117
-          reference: <testLibraryFragment>::@prefix::i3
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryExports
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_import_hide() async {
-    var library = await buildLibrary('''
-import 'dart:async' hide Stream, Completer; Future f;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      combinators
-        hide: Stream, Completer
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          combinators
-            hide: Stream, Completer
-      topLevelVariables
-        static f @51
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: Future<dynamic>
-      accessors
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: Future<dynamic>
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: Future<dynamic>
-          returnType: void
-''');
-  }
-
-  test_import_hide_offsetEnd() async {
-    var library = await buildLibrary('''
-import "dart:math" hide e, pi;
-''');
-    var import = library.libraryImports[0];
-    var combinator = import.combinators[0] as HideElementCombinator;
-    expect(combinator.offset, 19);
-    expect(combinator.end, 29);
-  }
-
-  test_import_invalidUri_metadata() async {
-    var library = await buildLibrary('''
-@foo
-import 'ht:';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  metadata
-    Annotation
-      atSign: @ @0
-      name: SimpleIdentifier
-        token: foo @1
-        staticElement: <null>
-        staticType: null
-      element: <null>
-  libraryImports
-    relativeUri 'ht:'
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      metadata
-        Annotation
-          atSign: @ @0
-          name: SimpleIdentifier
-            token: foo @1
-            staticElement: <null>
-            staticType: null
-          element: <null>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        relativeUri 'ht:'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: SimpleIdentifier
-                token: foo @1
-                staticElement: <null>
-                staticType: null
-              element: <null>
-''');
-  }
-
-  test_import_multiple_combinators() async {
-    var library = await buildLibrary('''
-import "dart:async" hide Stream show Future;
-Future f;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      combinators
-        hide: Stream
-        show: Future
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          combinators
-            hide: Stream
-            show: Future
-      topLevelVariables
-        static f @52
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: Future<dynamic>
-      accessors
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: Future<dynamic>
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: Future<dynamic>
-          returnType: void
-''');
-  }
-
-  test_import_prefixed() async {
-    addSource('$testPackageLibPath/a.dart', 'library a; class C {}');
-    var library = await buildLibrary('import "a.dart" as a; a.C c;');
-
-    var prefixElement = library.libraryImports[0].prefix!.element;
-    expect(prefixElement.nameOffset, 19);
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as a @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    a @19
-      reference: <testLibraryFragment>::@prefix::a
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as a @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        a @19
-          reference: <testLibraryFragment>::@prefix::a
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @26
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-''');
-  }
-
-  test_import_self() async {
-    var library = await buildLibrary('''
-import 'test.dart' as p;
-class C {}
-class D extends p.C {} // Prevent "unused import" warning
-''');
-    expect(library.libraryImports, hasLength(2));
-    expect(
-        library.libraryImports[0].importedLibrary!.location, library.location);
-    expect(library.libraryImports[1].importedLibrary!.isDartCore, true);
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/test.dart as p @22
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    p @22
-      reference: <testLibraryFragment>::@prefix::p
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/test.dart as p @22
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        p @22
-          reference: <testLibraryFragment>::@prefix::p
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @31
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @42
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          supertype: C
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-              superConstructor: <testLibraryFragment>::@class::C::@constructor::new
-''');
-  }
-
-  test_import_show() async {
-    var library = await buildLibrary('''
-import "dart:async" show Future, Stream;
-Future f;
-Stream s;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      combinators
-        show: Future, Stream
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          combinators
-            show: Future, Stream
-      topLevelVariables
-        static f @48
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: Future<dynamic>
-        static s @58
-          reference: <testLibraryFragment>::@topLevelVariable::s
-          enclosingElement: <testLibraryFragment>
-          type: Stream<dynamic>
-      accessors
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: Future<dynamic>
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: Future<dynamic>
-          returnType: void
-        synthetic static get s @-1
-          reference: <testLibraryFragment>::@getter::s
-          enclosingElement: <testLibraryFragment>
-          returnType: Stream<dynamic>
-        synthetic static set s= @-1
-          reference: <testLibraryFragment>::@setter::s
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _s @-1
-              type: Stream<dynamic>
-          returnType: void
-''');
-  }
-
-  test_import_show_offsetEnd() async {
-    var library = await buildLibrary('''
-import "dart:math" show e, pi;
-''');
-    var import = library.libraryImports[0];
-    var combinator = import.combinators[0] as ShowElementCombinator;
-    expect(combinator.offset, 19);
-    expect(combinator.end, 29);
-  }
-
-  test_import_uri() async {
-    var library = await buildLibrary('''
-import 'foo.dart';
-''');
-
-    var uri = library.libraryImports[0].uri as DirectiveUriWithLibrary;
-    expect(uri.relativeUriString, 'foo.dart');
-  }
-
-  test_imports() async {
-    addSource('$testPackageLibPath/a.dart', 'library a; class C {}');
-    addSource('$testPackageLibPath/b.dart', 'library b; class D {}');
-    var library =
-        await buildLibrary('import "a.dart"; import "b.dart"; C c; D d;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @36
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-        static d @41
-          reference: <testLibraryFragment>::@topLevelVariable::d
-          enclosingElement: <testLibraryFragment>
-          type: D
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get d @-1
-          reference: <testLibraryFragment>::@getter::d
-          enclosingElement: <testLibraryFragment>
-          returnType: D
-        synthetic static set d= @-1
-          reference: <testLibraryFragment>::@setter::d
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _d @-1
-              type: D
-          returnType: void
-''');
-  }
-
-  test_infer_generic_typedef_complex() async {
-    var library = await buildLibrary('''
-typedef F<T> = D<T,U> Function<U>();
-class C<V> {
-  const C(F<V> f);
-}
-class D<T,U> {}
-D<int,U> f<U>() => null;
-const x = const C(f);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @43
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant V @45
-              defaultType: dynamic
-          constructors
-            const @58
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional f @65
-                  type: D<V, U> Function<U>()
-                    alias: <testLibraryFragment>::@typeAlias::F
-                      typeArguments
-                        V
-        class D @77
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @79
-              defaultType: dynamic
-            covariant U @81
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: D<T, U> Function<U>()
-          aliasedElement: GenericFunctionTypeElement
-            typeParameters
-              covariant U @31
-            returnType: D<T, U>
-      topLevelVariables
-        static const x @118
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: C<int>
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @122
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @128
-                  element: <testLibraryFragment>::@class::C
-                  type: C<int>
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::C::@constructor::new
-                  substitution: {V: int}
-              argumentList: ArgumentList
-                leftParenthesis: ( @129
-                arguments
-                  SimpleIdentifier
-                    token: f @130
-                    staticElement: <testLibraryFragment>::@function::f
-                    staticType: D<int, U> Function<U>()
-                rightParenthesis: ) @131
-              staticType: C<int>
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: C<int>
-      functions
-        f @96
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U @98
-              defaultType: dynamic
-          returnType: D<int, U>
-''');
-  }
-
-  test_infer_generic_typedef_simple() async {
-    var library = await buildLibrary('''
-typedef F = D<T> Function<T>();
-class C {
-  const C(F f);
-}
-class D<T> {}
-D<T> f<T>() => null;
-const x = const C(f);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @38
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @50
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional f @54
-                  type: D<T> Function<T>()
-                    alias: <testLibraryFragment>::@typeAlias::F
-        class D @66
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @68
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: D<T> Function<T>()
-          aliasedElement: GenericFunctionTypeElement
-            typeParameters
-              covariant T @26
-            returnType: D<T>
-      topLevelVariables
-        static const x @101
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            InstanceCreationExpression
-              keyword: const @105
-              constructorName: ConstructorName
-                type: NamedType
-                  name: C @111
-                  element: <testLibraryFragment>::@class::C
-                  type: C
-                staticElement: <testLibraryFragment>::@class::C::@constructor::new
-              argumentList: ArgumentList
-                leftParenthesis: ( @112
-                arguments
-                  SimpleIdentifier
-                    token: f @113
-                    staticElement: <testLibraryFragment>::@function::f
-                    staticType: D<T> Function<T>()
-                rightParenthesis: ) @114
-              staticType: C
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-      functions
-        f @79
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @81
-              defaultType: dynamic
-          returnType: D<T>
-''');
-  }
-
-  test_infer_instanceCreation_fromArguments() async {
-    var library = await buildLibrary('''
-class A {}
-
-class B extends A {}
-
-class S<T extends A> {
-  S(T _);
-}
-
-var s = new S(new B());
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @18
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-        class S @40
-          reference: <testLibraryFragment>::@class::S
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @42
-              bound: A
-              defaultType: A
-          constructors
-            @59
-              reference: <testLibraryFragment>::@class::S::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::S
-              parameters
-                requiredPositional _ @63
-                  type: T
-      topLevelVariables
-        static s @74
-          reference: <testLibraryFragment>::@topLevelVariable::s
-          enclosingElement: <testLibraryFragment>
-          type: S<B>
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get s @-1
-          reference: <testLibraryFragment>::@getter::s
-          enclosingElement: <testLibraryFragment>
-          returnType: S<B>
-        synthetic static set s= @-1
-          reference: <testLibraryFragment>::@setter::s
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _s @-1
-              type: S<B>
-          returnType: void
-''');
-  }
-
-  test_infer_property_set() async {
-    var library = await buildLibrary('''
-class A {
-  B b;
-}
-class B {
-  C get c => null;
-  void set c(C value) {}
-}
-class C {}
-class D extends C {}
-var a = new A();
-var x = a.b.c ??= new D();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            b @14
-              reference: <testLibraryFragment>::@class::A::@field::b
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: B
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get b @-1
-              reference: <testLibraryFragment>::@class::A::@getter::b
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: B
-            synthetic set b= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::b
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _b @-1
-                  type: B
-              returnType: void
-        class B @25
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic c @-1
-              reference: <testLibraryFragment>::@class::B::@field::c
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: C
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-          accessors
-            get c @37
-              reference: <testLibraryFragment>::@class::B::@getter::c
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: C
-            set c= @59
-              reference: <testLibraryFragment>::@class::B::@setter::c
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional value @63
-                  type: C
-              returnType: void
-        class C @81
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @92
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          supertype: C
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-              superConstructor: <testLibraryFragment>::@class::C::@constructor::new
-      topLevelVariables
-        static a @111
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: A
-          shouldUseTypeForInitializerInference: false
-        static x @128
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: A
-        synthetic static set a= @-1
-          reference: <testLibraryFragment>::@setter::a
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _a @-1
-              type: A
-          returnType: void
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: C
-          returnType: void
-''');
-  }
-
-  test_inference_issue_32394() async {
-    // Test the type inference involved in dartbug.com/32394
-    var library = await buildLibrary('''
-var x = y.map((a) => a.toString());
-var y = [3];
-var z = x.toList();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static x @4
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Iterable<String>
-          shouldUseTypeForInitializerInference: false
-        static y @40
-          reference: <testLibraryFragment>::@topLevelVariable::y
-          enclosingElement: <testLibraryFragment>
-          type: List<int>
-          shouldUseTypeForInitializerInference: false
-        static z @53
-          reference: <testLibraryFragment>::@topLevelVariable::z
-          enclosingElement: <testLibraryFragment>
-          type: List<String>
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Iterable<String>
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: Iterable<String>
-          returnType: void
-        synthetic static get y @-1
-          reference: <testLibraryFragment>::@getter::y
-          enclosingElement: <testLibraryFragment>
-          returnType: List<int>
-        synthetic static set y= @-1
-          reference: <testLibraryFragment>::@setter::y
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _y @-1
-              type: List<int>
-          returnType: void
-        synthetic static get z @-1
-          reference: <testLibraryFragment>::@getter::z
-          enclosingElement: <testLibraryFragment>
-          returnType: List<String>
-        synthetic static set z= @-1
-          reference: <testLibraryFragment>::@setter::z
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _z @-1
-              type: List<String>
-          returnType: void
-''');
-  }
-
-  test_inference_map() async {
-    var library = await buildLibrary('''
-class C {
-  int p;
-}
-var x = <C>[];
-var y = x.map((c) => c.p);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            p @16
-              reference: <testLibraryFragment>::@class::C::@field::p
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get p @-1
-              reference: <testLibraryFragment>::@class::C::@getter::p
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set p= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::p
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _p @-1
-                  type: int
-              returnType: void
-      topLevelVariables
-        static x @25
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: List<C>
-          shouldUseTypeForInitializerInference: false
-        static y @40
-          reference: <testLibraryFragment>::@topLevelVariable::y
-          enclosingElement: <testLibraryFragment>
-          type: Iterable<int>
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: List<C>
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: List<C>
-          returnType: void
-        synthetic static get y @-1
-          reference: <testLibraryFragment>::@getter::y
-          enclosingElement: <testLibraryFragment>
-          returnType: Iterable<int>
-        synthetic static set y= @-1
-          reference: <testLibraryFragment>::@setter::y
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _y @-1
-              type: Iterable<int>
-          returnType: void
-''');
-  }
-
-  test_inferred_function_type_for_variable_in_generic_function() async {
-    // In the code below, `x` has an inferred type of `() => int`, with 2
-    // (unused) type parameters from the enclosing top level function.
-    var library = await buildLibrary('''
-f<U, V>() {
-  var x = () => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U @2
-              defaultType: dynamic
-            covariant V @5
-              defaultType: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_inferred_function_type_in_generic_class_constructor() async {
-    // In the code below, `() => () => 0` has an inferred return type of
-    // `() => int`, with 2 (unused) type parameters from the enclosing class.
-    var library = await buildLibrary('''
-class C<U, V> {
-  final x;
-  C() : x = (() => () => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U @8
-              defaultType: dynamic
-            covariant V @11
-              defaultType: dynamic
-          fields
-            final x @24
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @29
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_inferred_function_type_in_generic_class_getter() async {
-    // In the code below, `() => () => 0` has an inferred return type of
-    // `() => int`, with 2 (unused) type parameters from the enclosing class.
-    var library = await buildLibrary('''
-class C<U, V> {
-  get x => () => () => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U @8
-              defaultType: dynamic
-            covariant V @11
-              defaultType: dynamic
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            get x @22
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_inferred_function_type_in_generic_class_in_generic_method() async {
-    // In the code below, `() => () => 0` has an inferred return type of
-    // `() => int`, with 3 (unused) type parameters from the enclosing class
-    // and method.
-    var library = await buildLibrary('''
-class C<T> {
-  f<U, V>() {
-    print(() => () => 0);
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @15
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              typeParameters
-                covariant U @17
-                  defaultType: dynamic
-                covariant V @20
-                  defaultType: dynamic
-              returnType: dynamic
-''');
-  }
-
-  test_inferred_function_type_in_generic_class_setter() async {
-    // In the code below, `() => () => 0` has an inferred return type of
-    // `() => int`, with 2 (unused) type parameters from the enclosing class.
-    var library = await buildLibrary('''
-class C<U, V> {
-  void set x(value) {
-    print(() => () => 0);
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U @8
-              defaultType: dynamic
-            covariant V @11
-              defaultType: dynamic
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            set x= @27
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @29
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_inferred_function_type_in_generic_closure() async {
-    // In the code below, `<U, V>() => () => 0` has an inferred return type of
-    // `() => int`, with 3 (unused) type parameters.
-    var library = await buildLibrary('''
-f<T>() {
-  print(/*<U, V>*/() => () => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @2
-              defaultType: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_inferred_generic_function_type_in_generic_closure() async {
-    // In the code below, `<U, V>() => <W, X, Y, Z>() => 0` has an inferred
-    // return type of `() => int`, with 7 (unused) type parameters.
-    var library = await buildLibrary('''
-f<T>() {
-  print(/*<U, V>*/() => /*<W, X, Y, Z>*/() => 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @2
-              defaultType: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_inferred_type_could_not_infer() async {
-    var library = await buildLibrary(r'''
-class C<P extends num> {
-  factory C(Iterable<P> p) => C._();
-  C._();
-}
-
-var c = C([]);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant P @8
-              bound: num
-              defaultType: num
-          constructors
-            factory @35
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional p @49
-                  type: Iterable<P>
-            _ @66
-              reference: <testLibraryFragment>::@class::C::@constructor::_
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 65
-              nameEnd: 67
-      topLevelVariables
-        static c @78
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C<dynamic>
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C<dynamic>
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C<dynamic>
-          returnType: void
-''');
-  }
-
-  test_inferred_type_functionExpressionInvocation_oppositeOrder() async {
-    var library = await buildLibrary('''
-class A {
-  static final foo = bar(1.2);
-  static final bar = baz();
-
-  static int Function(double) baz() => (throw 0);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            static final foo @25
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: false
-            static final bar @56
-              reference: <testLibraryFragment>::@class::A::@field::bar
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int Function(double)
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-            synthetic static get bar @-1
-              reference: <testLibraryFragment>::@class::A::@getter::bar
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int Function(double)
-          methods
-            static baz @100
-              reference: <testLibraryFragment>::@class::A::@method::baz
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int Function(double)
-''');
-  }
-
-  test_inferred_type_inference_failure_on_function_invocation() async {
-    writeTestPackageAnalysisOptionsFile(
-      AnalysisOptionsFileConfig(
-        strictInference: true,
-      ),
-    );
-    var library = await buildLibrary(r'''
-int m<T>() => 1;
-var x = m();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static x @21
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int
-          returnType: void
-      functions
-        m @4
-          reference: <testLibraryFragment>::@function::m
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @6
-              defaultType: dynamic
-          returnType: int
-''');
-  }
-
-  test_inferred_type_inference_failure_on_generic_invocation() async {
-    writeTestPackageAnalysisOptionsFile(
-      AnalysisOptionsFileConfig(
-        strictInference: true,
-      ),
-    );
-    var library = await buildLibrary(r'''
-int Function<T>()? m = <T>() => 1;
-int Function<T>() n = <T>() => 2;
-var x = (m ?? n)();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static m @19
-          reference: <testLibraryFragment>::@topLevelVariable::m
-          enclosingElement: <testLibraryFragment>
-          type: int Function<T>()?
-          shouldUseTypeForInitializerInference: true
-        static n @53
-          reference: <testLibraryFragment>::@topLevelVariable::n
-          enclosingElement: <testLibraryFragment>
-          type: int Function<T>()
-          shouldUseTypeForInitializerInference: true
-        static x @73
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get m @-1
-          reference: <testLibraryFragment>::@getter::m
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function<T>()?
-        synthetic static set m= @-1
-          reference: <testLibraryFragment>::@setter::m
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _m @-1
-              type: int Function<T>()?
-          returnType: void
-        synthetic static get n @-1
-          reference: <testLibraryFragment>::@getter::n
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function<T>()
-        synthetic static set n= @-1
-          reference: <testLibraryFragment>::@setter::n
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _n @-1
-              type: int Function<T>()
-          returnType: void
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_inferred_type_inference_failure_on_instance_creation() async {
-    writeTestPackageAnalysisOptionsFile(
-      AnalysisOptionsFileConfig(
-        strictInference: true,
-      ),
-    );
-    var library = await buildLibrary(r'''
-import 'dart:collection';
-var m = HashMap();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:collection
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:collection
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static m @30
-          reference: <testLibraryFragment>::@topLevelVariable::m
-          enclosingElement: <testLibraryFragment>
-          type: HashMap<dynamic, dynamic>
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get m @-1
-          reference: <testLibraryFragment>::@getter::m
-          enclosingElement: <testLibraryFragment>
-          returnType: HashMap<dynamic, dynamic>
-        synthetic static set m= @-1
-          reference: <testLibraryFragment>::@setter::m
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _m @-1
-              type: HashMap<dynamic, dynamic>
-          returnType: void
-''');
-  }
-
-  test_inferred_type_initializer_cycle() async {
-    var library = await buildLibrary(r'''
-var a = b + 1;
-var b = c + 2;
-var c = a + 3;
-var d = 4;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static a @4
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [a, b, c]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static b @19
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [a, b, c]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static c @34
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [a, b, c]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static d @49
-          reference: <testLibraryFragment>::@topLevelVariable::d
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set a= @-1
-          reference: <testLibraryFragment>::@setter::a
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _a @-1
-              type: dynamic
-          returnType: void
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set b= @-1
-          reference: <testLibraryFragment>::@setter::b
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _b @-1
-              type: dynamic
-          returnType: void
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: dynamic
-          returnType: void
-        synthetic static get d @-1
-          reference: <testLibraryFragment>::@getter::d
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set d= @-1
-          reference: <testLibraryFragment>::@setter::d
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _d @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_inferred_type_is_typedef() async {
-    var library = await buildLibrary('typedef int F(String s);'
-        ' class C extends D { var v; }'
-        ' abstract class D { F get v; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @31
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          fields
-            v @49
-              reference: <testLibraryFragment>::@class::C::@field::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int Function(String)
-                alias: <testLibraryFragment>::@typeAlias::F
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-          accessors
-            synthetic get v @-1
-              reference: <testLibraryFragment>::@class::C::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int Function(String)
-                alias: <testLibraryFragment>::@typeAlias::F
-            synthetic set v= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _v @-1
-                  type: int Function(String)
-                    alias: <testLibraryFragment>::@typeAlias::F
-              returnType: void
-        abstract class D @69
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic v @-1
-              reference: <testLibraryFragment>::@class::D::@field::v
-              enclosingElement: <testLibraryFragment>::@class::D
-              type: int Function(String)
-                alias: <testLibraryFragment>::@typeAlias::F
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          accessors
-            abstract get v @79
-              reference: <testLibraryFragment>::@class::D::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::D
-              returnType: int Function(String)
-                alias: <testLibraryFragment>::@typeAlias::F
-      typeAliases
-        functionTypeAliasBased F @12
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: int Function(String)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional s @21
-                type: String
-            returnType: int
-''');
-  }
-
-  test_inferred_type_nullability_class_ref_none() async {
-    addSource('$testPackageLibPath/a.dart', 'int f() => 0;');
-    var library = await buildLibrary('''
-import 'a.dart';
-var x = f();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static x @21
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_inferred_type_nullability_class_ref_question() async {
-    addSource('$testPackageLibPath/a.dart', 'int? f() => 0;');
-    var library = await buildLibrary('''
-import 'a.dart';
-var x = f();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static x @21
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int?
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int?
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int?
-          returnType: void
-''');
-  }
-
-  test_inferred_type_nullability_function_type_none() async {
-    addSource('$testPackageLibPath/a.dart', 'void Function() f() => () {};');
-    var library = await buildLibrary('''
-import 'a.dart';
-var x = f();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static x @21
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: void Function()
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: void Function()
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: void Function()
-          returnType: void
-''');
-  }
-
-  test_inferred_type_nullability_function_type_question() async {
-    addSource('$testPackageLibPath/a.dart', 'void Function()? f() => () {};');
-    var library = await buildLibrary('''
-import 'a.dart';
-var x = f();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static x @21
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: void Function()?
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: void Function()?
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: void Function()?
-          returnType: void
-''');
-  }
-
-  test_inferred_type_refers_to_bound_type_param() async {
-    var library = await buildLibrary('''
-class C<T> extends D<int, T> {
-  var v;
-}
-abstract class D<U, V> {
-  Map<V, U> get v;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          supertype: D<int, T>
-          fields
-            v @37
-              reference: <testLibraryFragment>::@class::C::@field::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: Map<T, int>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::D::@constructor::new
-                substitution: {U: int, V: T}
-          accessors
-            synthetic get v @-1
-              reference: <testLibraryFragment>::@class::C::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: Map<T, int>
-            synthetic set v= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _v @-1
-                  type: Map<T, int>
-              returnType: void
-        abstract class D @57
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U @59
-              defaultType: dynamic
-            covariant V @62
-              defaultType: dynamic
-          fields
-            synthetic v @-1
-              reference: <testLibraryFragment>::@class::D::@field::v
-              enclosingElement: <testLibraryFragment>::@class::D
-              type: Map<V, U>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          accessors
-            abstract get v @83
-              reference: <testLibraryFragment>::@class::D::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::D
-              returnType: Map<V, U>
-''');
-  }
-
-  test_inferred_type_refers_to_function_typed_param_of_typedef() async {
-    var library = await buildLibrary('''
-typedef void F(int g(String s));
-h(F f) => null;
-var v = h((y) {});
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function(int Function(String))
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional g @19
-                type: int Function(String)
-                parameters
-                  requiredPositional s @28
-                    type: String
-            returnType: void
-      topLevelVariables
-        static v @53
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: dynamic
-          returnType: void
-      functions
-        h @33
-          reference: <testLibraryFragment>::@function::h
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional f @37
-              type: void Function(int Function(String))
-                alias: <testLibraryFragment>::@typeAlias::F
-          returnType: dynamic
-''');
-  }
-
-  test_inferred_type_refers_to_function_typed_parameter_type_generic_class() async {
-    var library = await buildLibrary('''
-class C<T, U> extends D<U, int> {
-  void f(int x, g) {}
-}
-abstract class D<V, W> {
-  void f(int x, W g(V s));
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          supertype: D<U, int>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::D::@constructor::new
-                substitution: {V: U, W: int}
-          methods
-            f @41
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional x @47
-                  type: int
-                requiredPositional g @50
-                  type: int Function(U)
-              returnType: void
-        abstract class D @73
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant V @75
-              defaultType: dynamic
-            covariant W @78
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          methods
-            abstract f @90
-              reference: <testLibraryFragment>::@class::D::@method::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              parameters
-                requiredPositional x @96
-                  type: int
-                requiredPositional g @101
-                  type: W Function(V)
-                  parameters
-                    requiredPositional s @105
-                      type: V
-              returnType: void
-''');
-  }
-
-  test_inferred_type_refers_to_function_typed_parameter_type_other_lib() async {
-    addSource('$testPackageLibPath/a.dart', '''
-import 'b.dart';
-abstract class D extends E {}
-''');
-    addSource('$testPackageLibPath/b.dart', '''
-abstract class E {
-  void f(int x, int g(String s));
-}
-''');
-    var library = await buildLibrary('''
-import 'a.dart';
-class C extends D {
-  void f(int x, g) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @23
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: package:test/a.dart::<fragment>::@class::D::@constructor::new
-          methods
-            f @44
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional x @50
-                  type: int
-                requiredPositional g @53
-                  type: int Function(String)
-              returnType: void
-''');
-  }
-
-  test_inferred_type_refers_to_method_function_typed_parameter_type() async {
-    var library = await buildLibrary('class C extends D { void f(int x, g) {} }'
-        ' abstract class D { void f(int x, int g(String s)); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-          methods
-            f @25
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional x @31
-                  type: int
-                requiredPositional g @34
-                  type: int Function(String)
-              returnType: void
-        abstract class D @57
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          methods
-            abstract f @66
-              reference: <testLibraryFragment>::@class::D::@method::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              parameters
-                requiredPositional x @72
-                  type: int
-                requiredPositional g @79
-                  type: int Function(String)
-                  parameters
-                    requiredPositional s @88
-                      type: String
-              returnType: void
-''');
-  }
-
-  test_inferred_type_refers_to_nested_function_typed_param() async {
-    var library = await buildLibrary('''
-f(void g(int x, void h())) => null;
-var v = f((x, y) {});
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static v @40
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: dynamic
-          returnType: void
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional g @7
-              type: void Function(int, void Function())
-              parameters
-                requiredPositional x @13
-                  type: int
-                requiredPositional h @21
-                  type: void Function()
-          returnType: dynamic
-''');
-  }
-
-  test_inferred_type_refers_to_nested_function_typed_param_named() async {
-    var library = await buildLibrary('''
-f({void g(int x, void h())}) => null;
-var v = f(g: (x, y) {});
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static v @42
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: dynamic
-          returnType: void
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalNamed default g @8
-              reference: <testLibraryFragment>::@function::f::@parameter::g
-              type: void Function(int, void Function())
-              parameters
-                requiredPositional x @14
-                  type: int
-                requiredPositional h @22
-                  type: void Function()
-          returnType: dynamic
-''');
-  }
-
-  test_inferred_type_refers_to_setter_function_typed_parameter_type() async {
-    var library = await buildLibrary('class C extends D { void set f(g) {} }'
-        ' abstract class D { void set f(int g(String s)); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: D
-          fields
-            synthetic f @-1
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int Function(String)
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-          accessors
-            set f= @29
-              reference: <testLibraryFragment>::@class::C::@setter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional g @31
-                  type: int Function(String)
-              returnType: void
-        abstract class D @54
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic f @-1
-              reference: <testLibraryFragment>::@class::D::@field::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              type: int Function(String)
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-          accessors
-            abstract set f= @67
-              reference: <testLibraryFragment>::@class::D::@setter::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              parameters
-                requiredPositional g @73
-                  type: int Function(String)
-                  parameters
-                    requiredPositional s @82
-                      type: String
-              returnType: void
-''');
-  }
-
-  test_inferredType_definedInSdkLibraryPart() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-import 'dart:async';
-class A {
-  m(Stream p) {}
-}
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-class B extends A {
-  m(p) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class B @23
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: package:test/a.dart::<fragment>::@class::A::@constructor::new
-          methods
-            m @39
-              reference: <testLibraryFragment>::@class::B::@method::m
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional p @41
-                  type: Stream<dynamic>
-              returnType: dynamic
-''');
-    ClassElement b = library.definingCompilationUnit.classes[0];
-    ParameterElement p = b.methods[0].parameters[0];
-    // This test should verify that we correctly record inferred types,
-    // when the type is defined in a part of an SDK library. So, test that
-    // the type is actually in a part.
-    var streamElement = (p.type as InterfaceType).element;
-    expect(streamElement.source, isNot(streamElement.library.source));
-  }
-
-  test_inferredType_implicitCreation() async {
-    var library = await buildLibrary(r'''
-class A {
-  A();
-  A.named();
-}
-var a1 = A();
-var a2 = A.named();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-            named @21
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 20
-              nameEnd: 26
-      topLevelVariables
-        static a1 @36
-          reference: <testLibraryFragment>::@topLevelVariable::a1
-          enclosingElement: <testLibraryFragment>
-          type: A
-          shouldUseTypeForInitializerInference: false
-        static a2 @50
-          reference: <testLibraryFragment>::@topLevelVariable::a2
-          enclosingElement: <testLibraryFragment>
-          type: A
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a1 @-1
-          reference: <testLibraryFragment>::@getter::a1
-          enclosingElement: <testLibraryFragment>
-          returnType: A
-        synthetic static set a1= @-1
-          reference: <testLibraryFragment>::@setter::a1
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _a1 @-1
-              type: A
-          returnType: void
-        synthetic static get a2 @-1
-          reference: <testLibraryFragment>::@getter::a2
-          enclosingElement: <testLibraryFragment>
-          returnType: A
-        synthetic static set a2= @-1
-          reference: <testLibraryFragment>::@setter::a2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _a2 @-1
-              type: A
-          returnType: void
-''');
-  }
-
-  test_inferredType_implicitCreation_prefixed() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-class A {
-  A();
-  A.named();
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart' as foo;
-var a1 = foo.A();
-var a2 = foo.A.named();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static a1 @30
-          reference: <testLibraryFragment>::@topLevelVariable::a1
-          enclosingElement: <testLibraryFragment>
-          type: A
-          shouldUseTypeForInitializerInference: false
-        static a2 @48
-          reference: <testLibraryFragment>::@topLevelVariable::a2
-          enclosingElement: <testLibraryFragment>
-          type: A
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a1 @-1
-          reference: <testLibraryFragment>::@getter::a1
-          enclosingElement: <testLibraryFragment>
-          returnType: A
-        synthetic static set a1= @-1
-          reference: <testLibraryFragment>::@setter::a1
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _a1 @-1
-              type: A
-          returnType: void
-        synthetic static get a2 @-1
-          reference: <testLibraryFragment>::@getter::a2
-          enclosingElement: <testLibraryFragment>
-          returnType: A
-        synthetic static set a2= @-1
-          reference: <testLibraryFragment>::@setter::a2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _a2 @-1
-              type: A
-          returnType: void
-''');
-  }
-
-  test_inferredType_usesSyntheticFunctionType_functionTypedParam() async {
-    // AnalysisContext does not set the enclosing element for the synthetic
-    // FunctionElement created for the [f, g] type argument.
-    var library = await buildLibrary('''
-int f(int x(String y)) => null;
-String g(int x(String y)) => null;
-var v = [f, g];
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static v @71
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: List<Object Function(int Function(String))>
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: List<Object Function(int Function(String))>
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: List<Object Function(int Function(String))>
-          returnType: void
-      functions
-        f @4
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional x @10
-              type: int Function(String)
-              parameters
-                requiredPositional y @19
-                  type: String
-          returnType: int
-        g @39
-          reference: <testLibraryFragment>::@function::g
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional x @45
-              type: int Function(String)
-              parameters
-                requiredPositional y @54
-                  type: String
-          returnType: String
-''');
-  }
-
-  test_inheritance_errors() async {
-    var library = await buildLibrary('''
-abstract class A {
-  int m();
-}
-
-abstract class B {
-  String m();
-}
-
-abstract class C implements A, B {}
-
-abstract class D extends C {
-  var f;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class A @15
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            abstract m @25
-              reference: <testLibraryFragment>::@class::A::@method::m
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-        abstract class B @48
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-          methods
-            abstract m @61
-              reference: <testLibraryFragment>::@class::B::@method::m
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: String
-        abstract class C @84
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            A
-            B
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        abstract class D @121
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          supertype: C
-          fields
-            f @141
-              reference: <testLibraryFragment>::@class::D::@field::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-              superConstructor: <testLibraryFragment>::@class::C::@constructor::new
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::D::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              returnType: dynamic
-            synthetic set f= @-1
-              reference: <testLibraryFragment>::@class::D::@setter::f
-              enclosingElement: <testLibraryFragment>::@class::D
-              parameters
-                requiredPositional _f @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure() async {
-    var library = await buildLibrary('var v = () => 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static v @4
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int Function()
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function()
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: int Function()
-          returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_await_dynamic() async {
-    var library = await buildLibrary('var v = (f) async => await f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static v @4
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: Future<dynamic> Function(dynamic)
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: Future<dynamic> Function(dynamic)
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: Future<dynamic> Function(dynamic)
-          returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_await_future3_int() async {
-    var library = await buildLibrary(r'''
-import 'dart:async';
-var v = (Future<Future<Future<int>>> f) async => await f;
-''');
-    // The analyzer type system over-flattens - see dartbug.com/31887
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static v @25
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: Future<int> Function(Future<Future<Future<int>>>)
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: Future<int> Function(Future<Future<Future<int>>>)
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: Future<int> Function(Future<Future<Future<int>>>)
-          returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_await_future_int() async {
-    var library = await buildLibrary(r'''
-import 'dart:async';
-var v = (Future<int> f) async => await f;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static v @25
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: Future<int> Function(Future<int>)
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: Future<int> Function(Future<int>)
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: Future<int> Function(Future<int>)
-          returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_await_future_noArg() async {
-    var library = await buildLibrary(r'''
-import 'dart:async';
-var v = (Future f) async => await f;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static v @25
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: Future<dynamic> Function(Future<dynamic>)
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: Future<dynamic> Function(Future<dynamic>)
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: Future<dynamic> Function(Future<dynamic>)
-          returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_field() async {
-    var library = await buildLibrary('''
-class C {
-  var v = () => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            v @16
-              reference: <testLibraryFragment>::@class::C::@field::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int Function()
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get v @-1
-              reference: <testLibraryFragment>::@class::C::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int Function()
-            synthetic set v= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _v @-1
-                  type: int Function()
-              returnType: void
-''');
-  }
-
-  test_initializer_executable_with_return_type_from_closure_local() async {
-    var library = await buildLibrary('''
-void f() {
-  int u = 0;
-  var v = () => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: void
-''');
-  }
-
-  test_instanceInference_operator_equal_from() async {
-    addSource('$testPackageLibPath/nullSafe.dart', r'''
-class NullSafeDefault {
-  bool operator==(other) => false;
-}
-class NullSafeObject {
-  bool operator==(Object other) => false;
-}
-class NullSafeInt {
-  bool operator==(int other) => false;
-}
-''');
-    var library = await buildLibrary(r'''
-import 'nullSafe.dart';
-class X1 extends NullSafeDefault {
-  bool operator==(other) => false;
-}
-class X2 extends NullSafeObject {
-  bool operator==(other) => false;
-}
-class X3 extends NullSafeInt {
-  bool operator==(other) => false;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/nullSafe.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/nullSafe.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class X1 @30
-          reference: <testLibraryFragment>::@class::X1
-          enclosingElement: <testLibraryFragment>
-          supertype: NullSafeDefault
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X1
-              superConstructor: package:test/nullSafe.dart::<fragment>::@class::NullSafeDefault::@constructor::new
-          methods
-            == @74
-              reference: <testLibraryFragment>::@class::X1::@method::==
-              enclosingElement: <testLibraryFragment>::@class::X1
-              parameters
-                requiredPositional other @77
-                  type: Object
-              returnType: bool
-        class X2 @102
-          reference: <testLibraryFragment>::@class::X2
-          enclosingElement: <testLibraryFragment>
-          supertype: NullSafeObject
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X2::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X2
-              superConstructor: package:test/nullSafe.dart::<fragment>::@class::NullSafeObject::@constructor::new
-          methods
-            == @145
-              reference: <testLibraryFragment>::@class::X2::@method::==
-              enclosingElement: <testLibraryFragment>::@class::X2
-              parameters
-                requiredPositional other @148
-                  type: Object
-              returnType: bool
-        class X3 @173
-          reference: <testLibraryFragment>::@class::X3
-          enclosingElement: <testLibraryFragment>
-          supertype: NullSafeInt
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X3::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X3
-              superConstructor: package:test/nullSafe.dart::<fragment>::@class::NullSafeInt::@constructor::new
-          methods
-            == @213
-              reference: <testLibraryFragment>::@class::X3::@method::==
-              enclosingElement: <testLibraryFragment>::@class::X3
-              parameters
-                requiredPositional other @216
-                  type: int
-              returnType: bool
-''');
-  }
-
-  test_instantiateToBounds_boundRefersToEarlierTypeArgument() async {
-    var library = await buildLibrary('''
-class C<S extends num, T extends C<S, T>> {}
-C c;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant S @8
-              bound: num
-              defaultType: num
-            covariant T @23
-              bound: C<S, T>
-              defaultType: C<num, dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static c @47
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C<num, C<num, dynamic>>
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C<num, C<num, dynamic>>
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C<num, C<num, dynamic>>
-          returnType: void
-''');
-  }
-
-  test_instantiateToBounds_boundRefersToItself() async {
-    var library = await buildLibrary('''
-class C<T extends C<T>> {}
-C c;
-var c2 = new C();
-class B {
-  var c3 = new C();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: C<T>
-              defaultType: C<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class B @56
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          fields
-            c3 @66
-              reference: <testLibraryFragment>::@class::B::@field::c3
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: C<C<Object?>>
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-          accessors
-            synthetic get c3 @-1
-              reference: <testLibraryFragment>::@class::B::@getter::c3
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: C<C<Object?>>
-            synthetic set c3= @-1
-              reference: <testLibraryFragment>::@class::B::@setter::c3
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional _c3 @-1
-                  type: C<C<Object?>>
-              returnType: void
-      topLevelVariables
-        static c @29
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C<C<dynamic>>
-        static c2 @36
-          reference: <testLibraryFragment>::@topLevelVariable::c2
-          enclosingElement: <testLibraryFragment>
-          type: C<C<Object?>>
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C<C<dynamic>>
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C<C<dynamic>>
-          returnType: void
-        synthetic static get c2 @-1
-          reference: <testLibraryFragment>::@getter::c2
-          enclosingElement: <testLibraryFragment>
-          returnType: C<C<Object?>>
-        synthetic static set c2= @-1
-          reference: <testLibraryFragment>::@setter::c2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c2 @-1
-              type: C<C<Object?>>
-          returnType: void
-''');
-  }
-
-  test_instantiateToBounds_boundRefersToLaterTypeArgument() async {
-    var library = await buildLibrary('''
-class C<T extends C<T, U>, U extends num> {}
-C c;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: C<T, U>
-              defaultType: C<dynamic, num>
-            covariant U @27
-              bound: num
-              defaultType: num
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static c @47
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C<C<dynamic, num>, num>
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C<C<dynamic, num>, num>
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C<C<dynamic, num>, num>
-          returnType: void
-''');
-  }
-
-  test_instantiateToBounds_functionTypeAlias_reexported() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class O {}
-typedef T F<T extends O>(T p);
-''');
-    addSource('$testPackageLibPath/b.dart', r'''
-export 'a.dart' show F;
-''');
-    var library = await buildLibrary('''
-import 'b.dart';
-class C {
-  F f() => null;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @23
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @31
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: O Function(O)
-                alias: package:test/a.dart::<fragment>::@typeAlias::F
-                  typeArguments
-                    O
-''');
-  }
-
-  test_instantiateToBounds_functionTypeAlias_simple() async {
-    var library = await buildLibrary('''
-typedef F<T extends num>(T p);
-F f;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @10
-              bound: num
-              defaultType: num
-          aliasedType: dynamic Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional p @27
-                type: T
-            returnType: dynamic
-      topLevelVariables
-        static f @33
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function(num)
-            alias: <testLibraryFragment>::@typeAlias::F
-              typeArguments
-                num
-      accessors
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function(num)
-            alias: <testLibraryFragment>::@typeAlias::F
-              typeArguments
-                num
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function(num)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    num
-          returnType: void
-''');
-  }
-
-  test_instantiateToBounds_genericFunctionAsBound() async {
-    var library = await buildLibrary('''
-class A<T> {}
-class B<T extends int Function(), U extends A<T>> {}
-B b;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        notSimplyBounded class B @20
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @22
-              bound: int Function()
-              defaultType: int Function()
-            covariant U @48
-              bound: A<T>
-              defaultType: A<int Function()>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-      topLevelVariables
-        static b @69
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: B<int Function(), A<int Function()>>
-      accessors
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: B<int Function(), A<int Function()>>
-        synthetic static set b= @-1
-          reference: <testLibraryFragment>::@setter::b
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _b @-1
-              type: B<int Function(), A<int Function()>>
-          returnType: void
-''');
-  }
-
-  test_instantiateToBounds_genericTypeAlias_simple() async {
-    var library = await buildLibrary('''
-typedef F<T extends num> = S Function<S>(T p);
-F f;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @10
-              bound: num
-              defaultType: num
-          aliasedType: S Function<S>(T)
-          aliasedElement: GenericFunctionTypeElement
-            typeParameters
-              covariant S @38
-            parameters
-              requiredPositional p @43
-                type: T
-            returnType: S
-      topLevelVariables
-        static f @49
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: S Function<S>(num)
-            alias: <testLibraryFragment>::@typeAlias::F
-              typeArguments
-                num
-      accessors
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: S Function<S>(num)
-            alias: <testLibraryFragment>::@typeAlias::F
-              typeArguments
-                num
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: S Function<S>(num)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    num
-          returnType: void
-''');
-  }
-
-  test_instantiateToBounds_issue38498() async {
-    var library = await buildLibrary('''
-class A<R extends B> {
-  final values = <B>[];
-}
-class B<T extends num> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant R @8
-              bound: B<num>
-              defaultType: B<num>
-          fields
-            final values @31
-              reference: <testLibraryFragment>::@class::A::@field::values
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: List<B<num>>
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get values @-1
-              reference: <testLibraryFragment>::@class::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: List<B<num>>
-        class B @55
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @57
-              bound: num
-              defaultType: num
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-''');
-  }
-
-  test_instantiateToBounds_simple() async {
-    var library = await buildLibrary('''
-class C<T extends num> {}
-C c;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: num
-              defaultType: num
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static c @28
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C<num>
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C<num>
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C<num>
-          returnType: void
-''');
-  }
-
-  test_invalid_annotation_prefixed_constructor() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class A {
-  const A.named();
-}
-''');
-    var library = await buildLibrary('''
-import "a.dart" as a;
-@a.A.named
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as a @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    a @19
-      reference: <testLibraryFragment>::@prefix::a
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as a @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        a @19
-          reference: <testLibraryFragment>::@prefix::a
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @39
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @22
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: a @23
-                  staticElement: <testLibraryFragment>::@prefix::a
-                  staticType: null
-                period: . @24
-                identifier: SimpleIdentifier
-                  token: A @25
-                  staticElement: package:test/a.dart::<fragment>::@class::A
-                  staticType: null
-                staticElement: package:test/a.dart::<fragment>::@class::A
-                staticType: null
-              period: . @26
-              constructorName: SimpleIdentifier
-                token: named @27
-                staticElement: package:test/a.dart::<fragment>::@class::A::@constructor::named
-                staticType: null
-              element: package:test/a.dart::<fragment>::@class::A::@constructor::named
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_invalid_annotation_unprefixed_constructor() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-class A {
-  const A.named();
-}
-''');
-    var library = await buildLibrary('''
-import "a.dart";
-@A.named
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @32
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @17
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: A @18
-                  staticElement: package:test/a.dart::<fragment>::@class::A
-                  staticType: null
-                period: . @19
-                identifier: SimpleIdentifier
-                  token: named @20
-                  staticElement: package:test/a.dart::<fragment>::@class::A::@constructor::named
-                  staticType: null
-                staticElement: package:test/a.dart::<fragment>::@class::A::@constructor::named
-                staticType: null
-              element: package:test/a.dart::<fragment>::@class::A::@constructor::named
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_invalid_importPrefix_asTypeArgument() async {
-    var library = await buildLibrary('''
-import 'dart:async' as ppp;
-class C {
-  List<ppp> v;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async as ppp @23
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    ppp @23
-      reference: <testLibraryFragment>::@prefix::ppp
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async as ppp @23
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        ppp @23
-          reference: <testLibraryFragment>::@prefix::ppp
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @34
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            v @50
-              reference: <testLibraryFragment>::@class::C::@field::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: List<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get v @-1
-              reference: <testLibraryFragment>::@class::C::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: List<dynamic>
-            synthetic set v= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _v @-1
-                  type: List<dynamic>
-              returnType: void
-''');
-  }
-
-  test_invalid_nameConflict_imported() async {
-    addSource('$testPackageLibPath/a.dart', 'V() {}');
-    addSource('$testPackageLibPath/b.dart', 'V() {}');
-    var library = await buildLibrary('''
-import 'a.dart';
-import 'b.dart';
-foo([p = V]) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      functions
-        foo @34
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalPositional default p @39
-              type: dynamic
-              constantInitializer
-                SimpleIdentifier
-                  token: V @43
-                  staticElement: <null>
-                  staticType: InvalidType
-          returnType: dynamic
-''');
-  }
-
-  test_invalid_nameConflict_imported_exported() async {
-    addSource('$testPackageLibPath/a.dart', 'V() {}');
-    addSource('$testPackageLibPath/b.dart', 'V() {}');
-    addSource('$testPackageLibPath/c.dart', r'''
-export 'a.dart';
-export 'b.dart';
-''');
-    var library = await buildLibrary('''
-import 'c.dart';
-foo([p = V]) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/c.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/c.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      functions
-        foo @17
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalPositional default p @22
-              type: dynamic
-              constantInitializer
-                SimpleIdentifier
-                  token: V @26
-                  staticElement: package:test/a.dart::<fragment>::@function::V
-                  staticType: dynamic Function()
-          returnType: dynamic
-''');
-  }
-
-  test_invalid_nameConflict_local() async {
-    var library = await buildLibrary('''
-foo([p = V]) {}
-V() {}
-var V;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static V @27
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set V= @-1
-          reference: <testLibraryFragment>::@setter::V
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _V @-1
-              type: dynamic
-          returnType: void
-      functions
-        foo @0
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalPositional default p @5
-              type: dynamic
-              constantInitializer
-                SimpleIdentifier
-                  token: V @9
-                  staticElement: <testLibraryFragment>::@getter::V
-                  staticType: dynamic
-          returnType: dynamic
-        V @16
-          reference: <testLibraryFragment>::@function::V
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_invalid_setterParameter_fieldFormalParameter() async {
-    var library = await buildLibrary('''
-class C {
-  int foo;
-  void set bar(this.foo) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            foo @16
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-            synthetic bar @-1
-              reference: <testLibraryFragment>::@class::C::@field::bar
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::C::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-            set bar= @32
-              reference: <testLibraryFragment>::@class::C::@setter::bar
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.foo @41
-                  type: dynamic
-                  field: <null>
-              returnType: void
-''');
-  }
-
-  test_invalid_setterParameter_fieldFormalParameter_self() async {
-    var library = await buildLibrary('''
-class C {
-  set x(this.x) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic x @-1
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            set x= @16
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @23
-                  type: dynamic
-                  field: <null>
-              returnType: void
-''');
-  }
-
-  test_library() async {
-    var library = await buildLibrary('');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_augmentationImports_augmentation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-class A {}
-''');
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class B {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @31
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class A @35
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
-''');
-
-    var import_0 = library.augmentationImports[0];
-    var augmentation = import_0.importedAugmentation!;
-    expect(augmentation.enclosingElement, same(library));
-  }
-
-  test_library_augmentationImports_depthFirst() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-''');
-
-    newFile('$testPackageLibPath/c.dart', r'''
-augment library 'test.dart';
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'c.dart';
-''');
-
-    configuration.withLibraryAugmentations = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentations
-    <testLibrary>::@augmentation::package:test/a.dart
-    <testLibrary>::@augmentation::package:test/b.dart
-    <testLibrary>::@augmentation::package:test/c.dart
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-    package:test/c.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/c.dart
-      definingUnit: <testLibrary>::@fragment::package:test/c.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-    <testLibrary>::@fragment::package:test/c.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/c.dart
-      enclosingElement3: <testLibraryFragment>
-''');
-
-    var import_0 = library.augmentationImports[0];
-    var augmentation = import_0.importedAugmentation!;
-    expect(augmentation.enclosingElement, same(library));
-  }
-
-  test_library_augmentationImports_noRelativeUriStr() async {
-    var library = await buildLibrary(r'''
-import augment '${'foo'}.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    noRelativeUriString
-      enclosingElement: <testLibrary>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_augmentationImports_withRelativeUri_emptyUriSelf() async {
-    var library = await buildLibrary(r'''
-import augment '';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    source 'package:test/test.dart'
-      enclosingElement: <testLibrary>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_augmentationImports_withRelativeUri_noSource() async {
-    var library = await buildLibrary(r'''
-import augment 'foo:bar';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    relativeUri 'foo:bar'
-      enclosingElement: <testLibrary>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_augmentationImports_withRelativeUri_notAugmentation_library() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-library my.lib;
-''');
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    source 'package:test/a.dart'
-      enclosingElement: <testLibrary>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_augmentationImports_withRelativeUri_notAugmentation_part() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-part of other.lib;
-''');
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    source 'package:test/a.dart'
-      enclosingElement: <testLibrary>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_augmentationImports_withRelativeUri_notExists() async {
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    source 'package:test/a.dart'
-      enclosingElement: <testLibrary>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_augmentationImports_withRelativeUriString() async {
-    var library = await buildLibrary(r'''
-import augment ':';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    relativeUriString ':'
-      enclosingElement: <testLibrary>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_documented_lines() async {
-    var library = await buildLibrary('''
-/// aaa
-/// bbb
-library test;
-''');
-    checkElementText(library, r'''
-library
-  name: test
-  nameOffset: 24
-  reference: <testLibrary>
-  documentationComment: /// aaa\n/// bbb
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_documented_stars() async {
-    var library = await buildLibrary('''
-/**
- * aaa
- * bbb
- */
-library test;''');
-    checkElementText(library, r'''
-library
-  name: test
-  nameOffset: 30
-  reference: <testLibrary>
-  documentationComment: /**\n * aaa\n * bbb\n */
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_exports_noRelativeUriStr() async {
-    var library = await buildLibrary(r'''
-export '${'foo'}.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    noRelativeUriString
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        noRelativeUriString
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_exports_withRelativeUri_emptyUriSelf() async {
-    var library = await buildLibrary(r'''
-export '';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/test.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/test.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_exports_withRelativeUri_noSource() async {
-    var library = await buildLibrary(r'''
-export 'foo:bar';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    relativeUri 'foo:bar'
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        relativeUri 'foo:bar'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_exports_withRelativeUri_notExists() async {
-    var library = await buildLibrary(r'''
-export 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_exports_withRelativeUri_notLibrary_augmentation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-''');
-    var library = await buildLibrary(r'''
-export 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    source 'package:test/a.dart'
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        source 'package:test/a.dart'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_exports_withRelativeUri_notLibrary_part() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-part of other.lib;
-''');
-    var library = await buildLibrary(r'''
-export 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    source 'package:test/a.dart'
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        source 'package:test/a.dart'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_exports_withRelativeUriString() async {
-    var library = await buildLibrary(r'''
-export ':';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    relativeUriString ':'
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        relativeUriString ':'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_imports_noRelativeUriStr() async {
-    var library = await buildLibrary(r'''
-import '${'foo'}.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    noRelativeUriString
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        noRelativeUriString
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_imports_prefix_importedLibraries() async {
-    var library = await buildLibrary(r'''
-import 'dart:async' as p1;
-import 'dart:collection' as p2;
-import 'dart:math' as p1;
-''');
-    var p1 = library.prefixes.singleWhere((prefix) => prefix.name == 'p1');
-    var import_async = library.libraryImports[0];
-    var import_math = library.libraryImports[2];
-    expect(p1.imports, unorderedEquals([import_async, import_math]));
-  }
-
-  test_library_imports_syntheticDartCore() async {
-    var library = await buildLibrary('');
-    configuration.withSyntheticDartCoreImport = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:core synthetic
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:core synthetic
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_imports_withRelativeUri_emptyUriSelf() async {
-    var library = await buildLibrary(r'''
-import '';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/test.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/test.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_imports_withRelativeUri_noSource() async {
-    var library = await buildLibrary(r'''
-import 'foo:bar';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    relativeUri 'foo:bar'
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        relativeUri 'foo:bar'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_imports_withRelativeUri_notExists() async {
-    var library = await buildLibrary(r'''
-import 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_imports_withRelativeUri_notLibrary_augmentation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    source 'package:test/a.dart'
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        source 'package:test/a.dart'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_imports_withRelativeUri_notLibrary_part() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-part of other.lib;
-''');
-    var library = await buildLibrary(r'''
-import 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    source 'package:test/a.dart'
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        source 'package:test/a.dart'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_imports_withRelativeUriString() async {
-    var library = await buildLibrary(r'''
-import ':';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    relativeUriString ':'
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        relativeUriString ':'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_name_with_spaces() async {
-    var library = await buildLibrary('library foo . bar ;');
-    checkElementText(library, r'''
-library
-  name: foo.bar
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_named() async {
-    var library = await buildLibrary('library foo.bar;');
-    checkElementText(library, r'''
-library
-  name: foo.bar
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_library_parts() async {
-    addSource('$testPackageLibPath/a.dart', 'part of my.lib;');
-    addSource('$testPackageLibPath/b.dart', 'part of my.lib;');
-    var library =
-        await buildLibrary('library my.lib; part "a.dart"; part "b.dart";');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-    part_1
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-        part_1
-          uri: package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/b.dart
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_parts_nested() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-part of 'test.dart';
-part 'a11.dart';
-part 'a12.dart';
-class A {}
-''');
-
-    newFile('$testPackageLibPath/a11.dart', r'''
-part of 'a.dart';
-class A11 {}
-''');
-
-    newFile('$testPackageLibPath/a12.dart', r'''
-part of 'a.dart';
-class A12 {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-part of 'test.dart';
-part 'b11.dart';
-part 'b12.dart';
-''');
-
-    newFile('$testPackageLibPath/b11.dart', r'''
-part of 'b.dart';
-class B11 {}
-''');
-
-    newFile('$testPackageLibPath/b12.dart', r'''
-part of 'b.dart';
-class B12 {}
-''');
-
-    var library = await buildLibrary('''
-part 'a.dart';
-part 'b.dart';
-class Z {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-    part_1
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-        part_1
-          uri: package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/b.dart
-      classes
-        class Z @36
-          reference: <testLibraryFragment>::@class::Z
-          enclosingElement: <testLibraryFragment>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      parts
-        part_2
-          uri: package:test/a11.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-          unit: <testLibrary>::@fragment::package:test/a11.dart
-        part_3
-          uri: package:test/a12.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-          unit: <testLibrary>::@fragment::package:test/a12.dart
-      classes
-        class A @61
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-    <testLibrary>::@fragment::package:test/a11.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class A11 @24
-          reference: <testLibrary>::@fragment::package:test/a11.dart::@class::A11
-          enclosingElement: <testLibrary>::@fragment::package:test/a11.dart
-    <testLibrary>::@fragment::package:test/a12.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class A12 @24
-          reference: <testLibrary>::@fragment::package:test/a12.dart::@class::A12
-          enclosingElement: <testLibrary>::@fragment::package:test/a12.dart
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      parts
-        part_4
-          uri: package:test/b11.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-          unit: <testLibrary>::@fragment::package:test/b11.dart
-        part_5
-          uri: package:test/b12.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-          unit: <testLibrary>::@fragment::package:test/b12.dart
-    <testLibrary>::@fragment::package:test/b11.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class B11 @24
-          reference: <testLibrary>::@fragment::package:test/b11.dart::@class::B11
-          enclosingElement: <testLibrary>::@fragment::package:test/b11.dart
-    <testLibrary>::@fragment::package:test/b12.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class B12 @24
-          reference: <testLibrary>::@fragment::package:test/b12.dart::@class::B12
-          enclosingElement: <testLibrary>::@fragment::package:test/b12.dart
-''');
-  }
-
-  test_library_parts_noRelativeUriStr() async {
-    var library = await buildLibrary(r'''
-part '${'foo'}.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: noRelativeUriString
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_parts_withPart_partOfName() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-part of my.lib;
-class B {}
-''');
-    var library = await buildLibrary(r'''
-library my.lib;
-part 'a.dart';
-class A {}
-''');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        class A @37
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class B @22
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
-''');
-  }
-
-  test_library_parts_withPart_partOfUri() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-part of 'test.dart';
-class B {}
-''');
-    var library = await buildLibrary(r'''
-part 'a.dart';
-class A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        class A @21
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class B @27
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
-''');
-  }
-
-  test_library_parts_withRelativeUri_noSource() async {
-    var library = await buildLibrary(r'''
-part 'foo:bar';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: relativeUri 'foo:bar'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_parts_withRelativeUri_notPart_emptyUriSelf() async {
-    var library = await buildLibrary(r'''
-part '';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: source 'package:test/test.dart'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_parts_withRelativeUri_notPart_library() async {
-    newFile('$testPackageLibPath/a.dart', '');
-    var library = await buildLibrary(r'''
-part 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: source 'package:test/a.dart'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_parts_withRelativeUri_notPart_notExists() async {
-    var library = await buildLibrary(r'''
-part 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: source 'package:test/a.dart'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_parts_withRelativeUriString() async {
-    var library = await buildLibrary(r'''
-part ':';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: relativeUriString ':'
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_library_prefixes() async {
-    var library = await buildLibrary(r'''
-import 'dart:async' as p1;
-import 'dart:collection' as p2;
-import 'dart:math' as p1;
-''');
-    var prefixNames = library.prefixes.map((e) => e.name).toList();
-    expect(prefixNames, unorderedEquals(['p1', 'p2']));
-  }
-
-  test_libraryExports_part() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-part of 'test.dart';
-export 'dart:math';
-''');
-
-    var library = await buildLibrary(r'''
-export 'dart:io';
-part 'a.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    dart:io
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        dart:io
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      libraryExports
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-''');
-  }
-
-  test_libraryImports_part() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-part of 'test.dart';
-import 'dart:math';
-''');
-
-    var library = await buildLibrary(r'''
-import 'dart:io';
-part 'a.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:io
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:io
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-''');
-  }
-
-  test_libraryImports_part_metadata() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-part of 'test.dart';
-@deprecated
-import 'dart:math';
-''');
-
-    var library = await buildLibrary(r'''
-part 'a.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-          metadata
-            Annotation
-              atSign: @ @21
-              name: SimpleIdentifier
-                token: deprecated @22
-                staticElement: dart:core::<fragment>::@getter::deprecated
-                staticType: null
-              element: dart:core::<fragment>::@getter::deprecated
-''');
-  }
-
-  test_localFunctions() async {
-    var library = await buildLibrary(r'''
-f() {
-  f1() {}
-  {
-    f2() {}
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_localFunctions_inConstructor() async {
-    var library = await buildLibrary(r'''
-class C {
-  C() {
-    f() {}
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_localFunctions_inMethod() async {
-    var library = await buildLibrary(r'''
-class C {
-  m() {
-    f() {}
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            m @12
-              reference: <testLibraryFragment>::@class::C::@method::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_localFunctions_inTopLevelGetter() async {
-    var library = await buildLibrary(r'''
-get g {
-  f() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static g @-1
-          reference: <testLibraryFragment>::@topLevelVariable::g
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        static get g @4
-          reference: <testLibraryFragment>::@getter::g
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_localLabels_inConstructor() async {
-    var library = await buildLibrary(r'''
-class C {
-  C() {
-    aaa: while (true) {}
-    bbb: switch (42) {
-      ccc: case 0:
-        break;
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_localLabels_inMethod() async {
-    var library = await buildLibrary(r'''
-class C {
-  m() {
-    aaa: while (true) {}
-    bbb: switch (42) {
-      ccc: case 0:
-        break;
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            m @12
-              reference: <testLibraryFragment>::@class::C::@method::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-''');
-  }
-
-  test_localLabels_inTopLevelFunction() async {
-    var library = await buildLibrary(r'''
-main() {
-  aaa: while (true) {}
-  bbb: switch (42) {
-    ccc: case 0:
-      break;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        main @0
-          reference: <testLibraryFragment>::@function::main
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_main_class() async {
-    var library = await buildLibrary('class main {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class main @6
-          reference: <testLibraryFragment>::@class::main
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::main::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::main
-''');
-  }
-
-  test_main_class_alias() async {
-    var library =
-        await buildLibrary('class main = C with D; class C {} class D {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias main @6
-          reference: <testLibraryFragment>::@class::main
-          enclosingElement: <testLibraryFragment>
-          supertype: C
-          mixins
-            D
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::main::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::main
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::C::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::C::@constructor::new
-        class C @29
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @40
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-''');
-  }
-
-  test_main_class_alias_via_export() async {
-    addSource('$testPackageLibPath/a.dart',
-        'class main = C with D; class C {} class D {}');
-    var library = await buildLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_main_class_via_export() async {
-    addSource('$testPackageLibPath/a.dart', 'class main {}');
-    var library = await buildLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_main_getter() async {
-    var library = await buildLibrary('get main => null;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static main @-1
-          reference: <testLibraryFragment>::@topLevelVariable::main
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        static get main @4
-          reference: <testLibraryFragment>::@getter::main
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_main_getter_via_export() async {
-    addSource('$testPackageLibPath/a.dart', 'get main => null;');
-    var library = await buildLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_main_typedef() async {
-    var library = await buildLibrary('typedef main();');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased main @8
-          reference: <testLibraryFragment>::@typeAlias::main
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-''');
-  }
-
-  test_main_typedef_via_export() async {
-    addSource('$testPackageLibPath/a.dart', 'typedef main();');
-    var library = await buildLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_main_variable() async {
-    var library = await buildLibrary('var main;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static main @4
-          reference: <testLibraryFragment>::@topLevelVariable::main
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        synthetic static get main @-1
-          reference: <testLibraryFragment>::@getter::main
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set main= @-1
-          reference: <testLibraryFragment>::@setter::main
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _main @-1
-              type: dynamic
-          returnType: void
-''');
-  }
-
-  test_main_variable_via_export() async {
-    addSource('$testPackageLibPath/a.dart', 'var main;');
-    var library = await buildLibrary('export "a.dart";');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_metadata_augmentation_class() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-@deprecated
-class A {}
-''');
-    var library = await buildLibrary('''
-import augment 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          metadata
-            Annotation
-              atSign: @ @29
-              name: SimpleIdentifier
-                token: deprecated @30
-                staticElement: dart:core::<fragment>::@getter::deprecated
-                staticType: null
-              element: dart:core::<fragment>::@getter::deprecated
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
-''');
-  }
-
-  test_metadata_augmentation_exportLibrary() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-@deprecated
-export 'dart:math';
-''');
-    var library = await buildLibrary('''
-import augment 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      libraryExports
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-          metadata
-            Annotation
-              atSign: @ @29
-              name: SimpleIdentifier
-                token: deprecated @30
-                staticElement: dart:core::<fragment>::@getter::deprecated
-                staticType: null
-              element: dart:core::<fragment>::@getter::deprecated
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryExports
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-          metadata
-            Annotation
-              atSign: @ @29
-              name: SimpleIdentifier
-                token: deprecated @30
-                staticElement: dart:core::<fragment>::@getter::deprecated
-                staticType: null
-              element: dart:core::<fragment>::@getter::deprecated
-''');
-  }
-
-  test_metadata_augmentation_importAugmentation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'b.dart';
-''');
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-@deprecated
-import augment 'a.dart';
-''');
-    var library = await buildLibrary('''
-import augment 'b.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-      augmentationImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-          metadata
-            Annotation
-              atSign: @ @29
-              name: SimpleIdentifier
-                token: deprecated @30
-                staticElement: dart:core::<fragment>::@getter::deprecated
-                staticType: null
-              element: dart:core::<fragment>::@getter::deprecated
-          reference: <testLibrary>::@augmentation::package:test/a.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-''');
-  }
-
-  test_metadata_augmentation_importLibrary() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-@deprecated
-import 'dart:math';
-''');
-    var library = await buildLibrary('''
-import augment 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      libraryImports
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-          metadata
-            Annotation
-              atSign: @ @29
-              name: SimpleIdentifier
-                token: deprecated @30
-                staticElement: dart:core::<fragment>::@getter::deprecated
-                staticType: null
-              element: dart:core::<fragment>::@getter::deprecated
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-          metadata
-            Annotation
-              atSign: @ @29
-              name: SimpleIdentifier
-                token: deprecated @30
-                staticElement: dart:core::<fragment>::@getter::deprecated
-                staticType: null
-              element: dart:core::<fragment>::@getter::deprecated
-''');
-  }
-
-  test_metadata_class_field_first() async {
-    var library = await buildLibrary(r'''
-const a = 0;
-class C {
-  @a
-  int x = 0;
-}
-''');
-    // Check metadata without asking any other properties.
-    var x = _elementOfDefiningUnit(library, ['@class', 'C', '@field', 'x'])
-        as FieldElement;
-    expect(x.metadata, hasLength(1));
-    // Check details.
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @19
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @34
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @25
-                  name: SimpleIdentifier
-                    token: a @26
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-              type: int
-              shouldUseTypeForInitializerInference: true
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: int
-              returnType: void
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @10
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_class_scope() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-class C<@foo T> {
-  static const foo = 1;
-  @foo
-  void bar() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @27
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          typeParameters
-            covariant T @34
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @29
-                  name: SimpleIdentifier
-                    token: foo @30
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          fields
-            static const foo @54
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 1 @60
-                  staticType: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@class::C::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-          methods
-            bar @77
-              reference: <testLibraryFragment>::@class::C::@method::bar
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @65
-                  name: SimpleIdentifier
-                    token: foo @66
-                    staticElement: <testLibraryFragment>::@class::C::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@class::C::@getter::foo
-              returnType: void
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_classDeclaration() async {
-    var library = await buildLibrary(r'''
-const a = null;
-const b = null;
-@a
-@b
-class C {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @44
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @32
-              name: SimpleIdentifier
-                token: a @33
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-            Annotation
-              atSign: @ @35
-              name: SimpleIdentifier
-                token: b @36
-                staticElement: <testLibraryFragment>::@getter::b
-                staticType: null
-              element: <testLibraryFragment>::@getter::b
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-        static const b @22
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @26
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_classTypeAlias() async {
-    var library = await buildLibrary(
-        'const a = null; @a class C = D with E; class D {} class E {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias C @25
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: a @17
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-          supertype: D
-          mixins
-            E
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @45
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @56
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_constructor_call_named() async {
-    var library = await buildLibrary('''
-class A {
-  const A.named(int _);
-}
-@A.named(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const named @20
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 19
-              nameEnd: 25
-              parameters
-                requiredPositional _ @30
-                  type: int
-        class C @54
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @36
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: A @37
-                  staticElement: <testLibraryFragment>::@class::A
-                  staticType: null
-                period: . @38
-                identifier: SimpleIdentifier
-                  token: named @39
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::named
-                  staticType: null
-                staticElement: <testLibraryFragment>::@class::A::@constructor::named
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @44
-                arguments
-                  IntegerLiteral
-                    literal: 0 @45
-                    staticType: int
-                rightParenthesis: ) @46
-              element: <testLibraryFragment>::@class::A::@constructor::named
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_named_generic_inference() async {
-    var library = await buildLibrary('''
-class A<T> {
-  const A.named(T _);
-}
-
-@A.named(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const named @23
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 22
-              nameEnd: 28
-              parameters
-                requiredPositional _ @31
-                  type: T
-        class C @56
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @38
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: A @39
-                  staticElement: <testLibraryFragment>::@class::A
-                  staticType: null
-                period: . @40
-                identifier: SimpleIdentifier
-                  token: named @41
-                  staticElement: ConstructorMember
-                    base: <testLibraryFragment>::@class::A::@constructor::named
-                    substitution: {T: int}
-                  staticType: null
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::A::@constructor::named
-                  substitution: {T: int}
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @46
-                arguments
-                  IntegerLiteral
-                    literal: 0 @47
-                    staticType: int
-                rightParenthesis: ) @48
-              element: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::named
-                substitution: {T: int}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_named_generic_typeArguments() async {
-    var library = await buildLibrary('''
-class A<T> {
-  const A.named();
-}
-
-@A<int>.named()
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const named @23
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 22
-              nameEnd: 28
-        class C @57
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @35
-              name: SimpleIdentifier
-                token: A @36
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              typeArguments: TypeArgumentList
-                leftBracket: < @37
-                arguments
-                  NamedType
-                    name: int @38
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @41
-              period: . @42
-              constructorName: SimpleIdentifier
-                token: named @43
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::A::@constructor::named
-                  substitution: {T: int}
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @48
-                rightParenthesis: ) @49
-              element: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::named
-                substitution: {T: int}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_named_generic_typeArguments_disabledGenericMetadata() async {
-    var library = await buildLibrary('''
-class A<T> {
-  const A.named();
-}
-
-@A<int>.named()
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const named @23
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 22
-              nameEnd: 28
-        class C @57
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @35
-              name: SimpleIdentifier
-                token: A @36
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              typeArguments: TypeArgumentList
-                leftBracket: < @37
-                arguments
-                  NamedType
-                    name: int @38
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @41
-              period: . @42
-              constructorName: SimpleIdentifier
-                token: named @43
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::A::@constructor::named
-                  substitution: {T: int}
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @48
-                rightParenthesis: ) @49
-              element: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::named
-                substitution: {T: int}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_named_prefixed() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-class A {
-  const A.named(int _);
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart' as foo;
-@foo.A.named(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @48
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @26
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @27
-                  staticElement: <testLibraryFragment>::@prefix::foo
-                  staticType: null
-                period: . @30
-                identifier: SimpleIdentifier
-                  token: A @31
-                  staticElement: package:test/foo.dart::<fragment>::@class::A
-                  staticType: null
-                staticElement: package:test/foo.dart::<fragment>::@class::A
-                staticType: null
-              period: . @32
-              constructorName: SimpleIdentifier
-                token: named @33
-                staticElement: package:test/foo.dart::<fragment>::@class::A::@constructor::named
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @38
-                arguments
-                  IntegerLiteral
-                    literal: 0 @39
-                    staticType: int
-                rightParenthesis: ) @40
-              element: package:test/foo.dart::<fragment>::@class::A::@constructor::named
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_named_prefixed_generic_inference() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-class A<T> {
-  const A.named(T _);
-}
-''');
-    var library = await buildLibrary('''
-import "foo.dart" as foo;
-@foo.A.named(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @48
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @26
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @27
-                  staticElement: <testLibraryFragment>::@prefix::foo
-                  staticType: null
-                period: . @30
-                identifier: SimpleIdentifier
-                  token: A @31
-                  staticElement: package:test/foo.dart::<fragment>::@class::A
-                  staticType: null
-                staticElement: package:test/foo.dart::<fragment>::@class::A
-                staticType: null
-              period: . @32
-              constructorName: SimpleIdentifier
-                token: named @33
-                staticElement: ConstructorMember
-                  base: package:test/foo.dart::<fragment>::@class::A::@constructor::named
-                  substitution: {T: int}
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @38
-                arguments
-                  IntegerLiteral
-                    literal: 0 @39
-                    staticType: int
-                rightParenthesis: ) @40
-              element: ConstructorMember
-                base: package:test/foo.dart::<fragment>::@class::A::@constructor::named
-                substitution: {T: int}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_named_prefixed_generic_typeArguments() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-class A<T> {
-  const A.named();
-}
-''');
-    var library = await buildLibrary('''
-import "foo.dart" as foo;
-@foo.A<int>.named()
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @52
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @26
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @27
-                  staticElement: <testLibraryFragment>::@prefix::foo
-                  staticType: null
-                period: . @30
-                identifier: SimpleIdentifier
-                  token: A @31
-                  staticElement: package:test/foo.dart::<fragment>::@class::A
-                  staticType: null
-                staticElement: package:test/foo.dart::<fragment>::@class::A
-                staticType: null
-              typeArguments: TypeArgumentList
-                leftBracket: < @32
-                arguments
-                  NamedType
-                    name: int @33
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @36
-              period: . @37
-              constructorName: SimpleIdentifier
-                token: named @38
-                staticElement: ConstructorMember
-                  base: package:test/foo.dart::<fragment>::@class::A::@constructor::named
-                  substitution: {T: int}
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @43
-                rightParenthesis: ) @44
-              element: ConstructorMember
-                base: package:test/foo.dart::<fragment>::@class::A::@constructor::named
-                substitution: {T: int}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_named_synthetic_ofClassAlias_generic() async {
-    var library = await buildLibrary('''
-class A {
-  const A.named();
-}
-
-mixin B {}
-
-class C<T> = A with B;
-
-@C.named()
-class D {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const named @20
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 19
-              nameEnd: 25
-        class alias C @50
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @52
-              defaultType: dynamic
-          supertype: A
-          mixins
-            B
-          constructors
-            synthetic const named @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  period: . @0
-                  constructorName: SimpleIdentifier
-                    token: named @-1
-                    staticElement: <testLibraryFragment>::@class::A::@constructor::named
-                    staticType: null
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::named
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::named
-        class D @85
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @68
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: C @69
-                  staticElement: <testLibraryFragment>::@class::C
-                  staticType: null
-                period: . @70
-                identifier: SimpleIdentifier
-                  token: named @71
-                  staticElement: ConstructorMember
-                    base: <testLibraryFragment>::@class::C::@constructor::named
-                    substitution: {T: dynamic}
-                  staticType: null
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::C::@constructor::named
-                  substitution: {T: dynamic}
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @76
-                rightParenthesis: ) @77
-              element: ConstructorMember
-                base: <testLibraryFragment>::@class::C::@constructor::named
-                substitution: {T: dynamic}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-      mixins
-        mixin B @38
-          reference: <testLibraryFragment>::@mixin::B
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_metadata_constructor_call_unnamed() async {
-    var library = await buildLibrary('''
-class A {
-  const A(int _);
-}
-@A(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @24
-                  type: int
-        class C @42
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @30
-              name: SimpleIdentifier
-                token: A @31
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @32
-                arguments
-                  IntegerLiteral
-                    literal: 0 @33
-                    staticType: int
-                rightParenthesis: ) @34
-              element: <testLibraryFragment>::@class::A::@constructor::new
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_generic_inference() async {
-    var library = await buildLibrary('''
-class A<T> {
-  const A(T _);
-}
-
-@A(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @25
-                  type: T
-        class C @44
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @32
-              name: SimpleIdentifier
-                token: A @33
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @34
-                arguments
-                  IntegerLiteral
-                    literal: 0 @35
-                    staticType: int
-                rightParenthesis: ) @36
-              element: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: int}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_generic_typeArguments() async {
-    var library = await buildLibrary('''
-class A<T> {
-  const A();
-}
-
-@A<int>()
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class C @45
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @29
-              name: SimpleIdentifier
-                token: A @30
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              typeArguments: TypeArgumentList
-                leftBracket: < @31
-                arguments
-                  NamedType
-                    name: int @32
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @35
-              arguments: ArgumentList
-                leftParenthesis: ( @36
-                rightParenthesis: ) @37
-              element: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: int}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_prefixed() async {
-    addSource('$testPackageLibPath/foo.dart', 'class A { const A(_); }');
-    var library =
-        await buildLibrary('import "foo.dart" as foo; @foo.A(0) class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @42
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @26
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @27
-                  staticElement: <testLibraryFragment>::@prefix::foo
-                  staticType: null
-                period: . @30
-                identifier: SimpleIdentifier
-                  token: A @31
-                  staticElement: package:test/foo.dart::<fragment>::@class::A
-                  staticType: null
-                staticElement: package:test/foo.dart::<fragment>::@class::A
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @32
-                arguments
-                  IntegerLiteral
-                    literal: 0 @33
-                    staticType: int
-                rightParenthesis: ) @34
-              element: package:test/foo.dart::<fragment>::@class::A::@constructor::new
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_prefixed_generic_inference() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-class A<T> {
-  const A(T _);
-}
-''');
-    var library = await buildLibrary('''
-import "foo.dart" as foo;
-@foo.A(0)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @42
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @26
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @27
-                  staticElement: <testLibraryFragment>::@prefix::foo
-                  staticType: null
-                period: . @30
-                identifier: SimpleIdentifier
-                  token: A @31
-                  staticElement: package:test/foo.dart::<fragment>::@class::A
-                  staticType: null
-                staticElement: package:test/foo.dart::<fragment>::@class::A
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @32
-                arguments
-                  IntegerLiteral
-                    literal: 0 @33
-                    staticType: int
-                rightParenthesis: ) @34
-              element: ConstructorMember
-                base: package:test/foo.dart::<fragment>::@class::A::@constructor::new
-                substitution: {T: int}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_prefixed_generic_typeArguments() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-class A<T> {
-  const A();
-}
-''');
-    var library = await buildLibrary('''
-import "foo.dart" as foo;
-@foo.A<int>()
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @46
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @26
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @27
-                  staticElement: <testLibraryFragment>::@prefix::foo
-                  staticType: null
-                period: . @30
-                identifier: SimpleIdentifier
-                  token: A @31
-                  staticElement: package:test/foo.dart::<fragment>::@class::A
-                  staticType: null
-                staticElement: package:test/foo.dart::<fragment>::@class::A
-                staticType: null
-              typeArguments: TypeArgumentList
-                leftBracket: < @32
-                arguments
-                  NamedType
-                    name: int @33
-                    element: dart:core::<fragment>::@class::int
-                    type: int
-                rightBracket: > @36
-              arguments: ArgumentList
-                leftParenthesis: ( @37
-                rightParenthesis: ) @38
-              element: ConstructorMember
-                base: package:test/foo.dart::<fragment>::@class::A::@constructor::new
-                substitution: {T: int}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructor_call_unnamed_synthetic_ofClassAlias_generic() async {
-    var library = await buildLibrary('''
-class A {
-  const A();
-}
-
-mixin B {}
-
-class C<T> = A with B;
-
-@C()
-class D {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class alias C @44
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @46
-              defaultType: dynamic
-          supertype: A
-          mixins
-            B
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-        class D @73
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @62
-              name: SimpleIdentifier
-                token: C @63
-                staticElement: <testLibraryFragment>::@class::C
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @64
-                rightParenthesis: ) @65
-              element: ConstructorMember
-                base: <testLibraryFragment>::@class::C::@constructor::new
-                substitution: {T: dynamic}
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-      mixins
-        mixin B @32
-          reference: <testLibraryFragment>::@mixin::B
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_metadata_constructor_call_with_args() async {
-    var library =
-        await buildLibrary('class A { const A(x); } @A(null) class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @16
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional x @18
-                  type: dynamic
-        class C @39
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @24
-              name: SimpleIdentifier
-                token: A @25
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @26
-                arguments
-                  NullLiteral
-                    literal: null @27
-                    staticType: Null
-                rightParenthesis: ) @31
-              element: <testLibraryFragment>::@class::A::@constructor::new
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_constructorDeclaration_named() async {
-    var library =
-        await buildLibrary('const a = null; class C { @a C.named(); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            named @31
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @26
-                  name: SimpleIdentifier
-                    token: a @27
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-              periodOffset: 30
-              nameEnd: 36
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_constructorDeclaration_unnamed() async {
-    var library = await buildLibrary('const a = null; class C { @a C(); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @29
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @26
-                  name: SimpleIdentifier
-                    token: a @27
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_enum_constant() async {
-    var library = await buildLibrary('const a = 42; enum E { @a v }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @19
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @26
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              metadata
-                Annotation
-                  atSign: @ @23
-                  name: SimpleIdentifier
-                    token: a @24
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 42 @10
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_enum_constant_instanceCreation() async {
-    var library = await buildLibrary('''
-class A {
-  final dynamic value;
-  const A(this.value);
-}
-
-enum E {
-  @A(100) a,
-  b,
-  @A(300) c,
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final value @26
-              reference: <testLibraryFragment>::@class::A::@field::value
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: dynamic
-          constructors
-            const @41
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional final this.value @48
-                  type: dynamic
-                  field: <testLibraryFragment>::@class::A::@field::value
-          accessors
-            synthetic get value @-1
-              reference: <testLibraryFragment>::@class::A::@getter::value
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: dynamic
-      enums
-        enum E @64
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant a @78
-              reference: <testLibraryFragment>::@enum::E::@field::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              metadata
-                Annotation
-                  atSign: @ @70
-                  name: SimpleIdentifier
-                    token: A @71
-                    staticElement: <testLibraryFragment>::@class::A
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @72
-                    arguments
-                      IntegerLiteral
-                        literal: 100 @73
-                        staticType: int
-                    rightParenthesis: ) @76
-                  element: <testLibraryFragment>::@class::A::@constructor::new
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant b @83
-              reference: <testLibraryFragment>::@enum::E::@field::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant c @96
-              reference: <testLibraryFragment>::@enum::E::@field::c
-              enclosingElement: <testLibraryFragment>::@enum::E
-              metadata
-                Annotation
-                  atSign: @ @88
-                  name: SimpleIdentifier
-                    token: A @89
-                    staticElement: <testLibraryFragment>::@class::A
-                    staticType: null
-                  arguments: ArgumentList
-                    leftParenthesis: ( @90
-                    arguments
-                      IntegerLiteral
-                        literal: 300 @91
-                        staticType: int
-                    rightParenthesis: ) @94
-                  element: <testLibraryFragment>::@class::A::@constructor::new
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: a @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
-                      staticType: E
-                    SimpleIdentifier
-                      token: b @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
-                      staticType: E
-                    SimpleIdentifier
-                      token: c @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::c
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get b @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get c @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::c
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_metadata_enum_constant_self() async {
-    var library = await buildLibrary(r'''
-enum E {
-  @v
-  v
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @16
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              metadata
-                Annotation
-                  atSign: @ @11
-                  name: SimpleIdentifier
-                    token: v @12
-                    staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                    staticType: null
-                  element: <testLibraryFragment>::@enum::E::@getter::v
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_metadata_enum_constructor() async {
-    var library = await buildLibrary(r'''
-const a = 42;
-enum E {
-  v;
-  @a
-  const E();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @19
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @25
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            const @41
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              metadata
-                Annotation
-                  atSign: @ @30
-                  name: SimpleIdentifier
-                    token: a @31
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 42 @10
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_enum_method() async {
-    var library = await buildLibrary(r'''
-const a = 42;
-enum E {
-  v;
-  @a
-  void foo() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @19
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @25
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-          methods
-            foo @40
-              reference: <testLibraryFragment>::@enum::E::@method::foo
-              enclosingElement: <testLibraryFragment>::@enum::E
-              metadata
-                Annotation
-                  atSign: @ @30
-                  name: SimpleIdentifier
-                    token: a @31
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-              returnType: void
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 42 @10
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_enum_scope() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-enum E<@foo T> {
-  v;
-  static const foo = 1;
-  @foo
-  void bar() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @26
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          typeParameters
-            covariant T @33
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @28
-                  name: SimpleIdentifier
-                    token: foo @29
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          supertype: Enum
-          fields
-            static const enumConstant v @40
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E<dynamic>
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E<dynamic>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@enum::E::@constructor::new
-                      substitution: {T: dynamic}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E<dynamic>
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E<dynamic>
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-            static const foo @58
-              reference: <testLibraryFragment>::@enum::E::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 1 @64
-                  staticType: int
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E<dynamic>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: int
-          methods
-            bar @81
-              reference: <testLibraryFragment>::@enum::E::@method::bar
-              enclosingElement: <testLibraryFragment>::@enum::E
-              metadata
-                Annotation
-                  atSign: @ @69
-                  name: SimpleIdentifier
-                    token: foo @70
-                    staticElement: <testLibraryFragment>::@enum::E::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@enum::E::@getter::foo
-              returnType: void
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_enum_typeParameter() async {
-    var library = await buildLibrary('''
-const a = 42;
-enum E<@a T> {
-  v
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @19
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @24
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @21
-                  name: SimpleIdentifier
-                    token: a @22
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-          supertype: Enum
-          fields
-            static const enumConstant v @31
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E<dynamic>
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E<dynamic>
-                    staticElement: ConstructorMember
-                      base: <testLibraryFragment>::@enum::E::@constructor::new
-                      substitution: {T: dynamic}
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E<dynamic>
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E<dynamic>>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E<dynamic>
-                  rightBracket: ] @0
-                  staticType: List<E<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E<dynamic>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E<dynamic>>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 42 @10
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_enumDeclaration() async {
-    var library = await buildLibrary('const a = 42; @a enum E { v }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @22
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @14
-              name: SimpleIdentifier
-                token: a @15
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-          supertype: Enum
-          fields
-            static const enumConstant v @26
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 42 @10
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_exportDirective() async {
-    addSource('$testPackageLibPath/foo.dart', '');
-    var library = await buildLibrary('@a export "foo.dart"; const a = null;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  metadata
-    Annotation
-      atSign: @ @0
-      name: SimpleIdentifier
-        token: a @1
-        staticElement: <testLibraryFragment>::@getter::a
-        staticType: null
-      element: <testLibraryFragment>::@getter::a
-  libraryExports
-    package:test/foo.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      metadata
-        Annotation
-          atSign: @ @0
-          name: SimpleIdentifier
-            token: a @1
-            staticElement: <testLibraryFragment>::@getter::a
-            staticType: null
-          element: <testLibraryFragment>::@getter::a
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/foo.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: SimpleIdentifier
-                token: a @1
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-      topLevelVariables
-        static const a @28
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @32
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_extension_scope() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-extension E<@foo T> on int {
-  static const foo = 1;
-  @foo
-  void bar() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        E @31
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          typeParameters
-            covariant T @38
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @33
-                  name: SimpleIdentifier
-                    token: foo @34
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          extendedType: int
-          fields
-            static const foo @65
-              reference: <testLibraryFragment>::@extension::E::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::E
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 1 @71
-                  staticType: int
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extension::E::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::E
-              returnType: int
-          methods
-            bar @88
-              reference: <testLibraryFragment>::@extension::E::@method::bar
-              enclosingElement: <testLibraryFragment>::@extension::E
-              metadata
-                Annotation
-                  atSign: @ @76
-                  name: SimpleIdentifier
-                    token: foo @77
-                    staticElement: <testLibraryFragment>::@extension::E::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@extension::E::@getter::foo
-              returnType: void
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_extensionDeclaration() async {
-    var library = await buildLibrary(r'''
-const a = null;
-class A {}
-@a
-@Object()
-extension E on A {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @22
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      extensions
-        E @50
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @27
-              name: SimpleIdentifier
-                token: a @28
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-            Annotation
-              atSign: @ @30
-              name: SimpleIdentifier
-                token: Object @31
-                staticElement: dart:core::<fragment>::@class::Object
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @37
-                rightParenthesis: ) @38
-              element: dart:core::<fragment>::@class::Object::@constructor::new
-          extendedType: A
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_fieldDeclaration() async {
-    var library = await buildLibrary('const a = null; class C { @a int x; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @33
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @26
-                  name: SimpleIdentifier
-                    token: a @27
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: int
-              returnType: void
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_fieldFormalParameter() async {
-    var library = await buildLibrary('''
-const a = null;
-class C {
-  var x;
-  C(@a this.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @32
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @37
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.x @47
-                  type: dynamic
-                  metadata
-                    Annotation
-                      atSign: @ @39
-                      name: SimpleIdentifier
-                        token: a @40
-                        staticElement: <testLibraryFragment>::@getter::a
-                        staticType: null
-                      element: <testLibraryFragment>::@getter::a
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_fieldFormalParameter_withDefault() async {
-    var library = await buildLibrary(
-        'const a = null; class C { var x; C([@a this.x = null]); }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @30
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            @33
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default final this.x @44
-                  type: dynamic
-                  metadata
-                    Annotation
-                      atSign: @ @36
-                      name: SimpleIdentifier
-                        token: a @37
-                        staticElement: <testLibraryFragment>::@getter::a
-                        staticType: null
-                      element: <testLibraryFragment>::@getter::a
-                  constantInitializer
-                    NullLiteral
-                      literal: null @48
-                      staticType: Null
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_functionDeclaration_function() async {
-    var library = await buildLibrary('''
-const a = null;
-@a
-f() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-      functions
-        f @19
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: a @17
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_functionDeclaration_getter() async {
-    var library = await buildLibrary('const a = null; @a get f => null;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-        synthetic static f @-1
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        static get f @23
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: a @17
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_functionDeclaration_setter() async {
-    var library = await buildLibrary('const a = null; @a set f(value) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-        synthetic static f @-1
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        static set f= @23
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: a @17
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-          parameters
-            requiredPositional value @25
-              type: dynamic
-          returnType: void
-''');
-  }
-
-  test_metadata_functionTypeAlias() async {
-    var library = await buildLibrary('const a = null; @a typedef F();');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @27
-          reference: <testLibraryFragment>::@typeAlias::F
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: a @17
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_functionTypedFormalParameter() async {
-    var library = await buildLibrary('const a = null; f(@a g()) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-      functions
-        f @16
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional g @21
-              type: dynamic Function()
-              metadata
-                Annotation
-                  atSign: @ @18
-                  name: SimpleIdentifier
-                    token: a @19
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_functionTypedFormalParameter_withDefault() async {
-    var library = await buildLibrary('const a = null; f([@a g() = null]) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-      functions
-        f @16
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalPositional default g @22
-              type: dynamic Function()
-              metadata
-                Annotation
-                  atSign: @ @19
-                  name: SimpleIdentifier
-                    token: a @20
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-              constantInitializer
-                NullLiteral
-                  literal: null @28
-                  staticType: null
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_genericTypeAlias() async {
-    var library = await buildLibrary(r'''
-const a = null;
-const b = null;
-@a
-@b
-typedef F = void Function();''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @46
-          reference: <testLibraryFragment>::@typeAlias::F
-          metadata
-            Annotation
-              atSign: @ @32
-              name: SimpleIdentifier
-                token: a @33
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-            Annotation
-              atSign: @ @35
-              name: SimpleIdentifier
-                token: b @36
-                staticElement: <testLibraryFragment>::@getter::b
-                staticType: null
-              element: <testLibraryFragment>::@getter::b
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-        static const b @22
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @26
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_importDirective() async {
-    var library = await buildLibrary('''
-@a
-import "dart:math";
-const a = 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  metadata
-    Annotation
-      atSign: @ @0
-      name: SimpleIdentifier
-        token: a @1
-        staticElement: <testLibraryFragment>::@getter::a
-        staticType: null
-      element: <testLibraryFragment>::@getter::a
-  libraryImports
-    dart:math
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      metadata
-        Annotation
-          atSign: @ @0
-          name: SimpleIdentifier
-            token: a @1
-            staticElement: <testLibraryFragment>::@getter::a
-            staticType: null
-          element: <testLibraryFragment>::@getter::a
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: SimpleIdentifier
-                token: a @1
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-      topLevelVariables
-        static const a @29
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @33
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_importDirective_hasShow() async {
-    var library = await buildLibrary(r'''
-@a
-import "dart:math" show Random;
-
-const a = 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  metadata
-    Annotation
-      atSign: @ @0
-      name: SimpleIdentifier
-        token: a @1
-        staticElement: <testLibraryFragment>::@getter::a
-        staticType: null
-      element: <testLibraryFragment>::@getter::a
-  libraryImports
-    dart:math
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      metadata
-        Annotation
-          atSign: @ @0
-          name: SimpleIdentifier
-            token: a @1
-            staticElement: <testLibraryFragment>::@getter::a
-            staticType: null
-          element: <testLibraryFragment>::@getter::a
-      combinators
-        show: Random
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:math
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: SimpleIdentifier
-                token: a @1
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-          combinators
-            show: Random
-      topLevelVariables
-        static const a @42
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @46
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_inAliasedElement_formalParameter() async {
-    var library = await buildLibrary('''
-const a = 42;
-typedef F = void Function(@a int first)
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @22
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function(int)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional first @47
-                type: int
-                metadata
-                  Annotation
-                    atSign: @ @40
-                    name: SimpleIdentifier
-                      token: a @41
-                      staticElement: <testLibraryFragment>::@getter::a
-                      staticType: null
-                    element: <testLibraryFragment>::@getter::a
-            returnType: void
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 42 @10
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_inAliasedElement_formalParameter2() async {
-    var library = await buildLibrary('''
-const a = 42;
-typedef F = void Function(int foo(@a int bar))
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @22
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function(int Function(int))
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional foo @44
-                type: int Function(int)
-                parameters
-                  requiredPositional bar @55
-                    type: int
-                    metadata
-                      Annotation
-                        atSign: @ @48
-                        name: SimpleIdentifier
-                          token: a @49
-                          staticElement: <testLibraryFragment>::@getter::a
-                          staticType: null
-                        element: <testLibraryFragment>::@getter::a
-            returnType: void
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 42 @10
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_inAliasedElement_typeParameter() async {
-    var library = await buildLibrary('''
-const a = 42;
-typedef F = void Function<@a T>(int first)
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @22
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function<T>(int)
-          aliasedElement: GenericFunctionTypeElement
-            typeParameters
-              covariant T @43
-                metadata
-                  Annotation
-                    atSign: @ @40
-                    name: SimpleIdentifier
-                      token: a @41
-                      staticElement: <testLibraryFragment>::@getter::a
-                      staticType: null
-                    element: <testLibraryFragment>::@getter::a
-            parameters
-              requiredPositional first @50
-                type: int
-            returnType: void
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 42 @10
-              staticType: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_invalid_classDeclaration() async {
-    var library = await buildLibrary('f(_) {} @f(42) class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @21
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @8
-              name: SimpleIdentifier
-                token: f @9
-                staticElement: <testLibraryFragment>::@function::f
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @10
-                arguments
-                  IntegerLiteral
-                    literal: 42 @11
-                    staticType: int
-                rightParenthesis: ) @13
-              element: <testLibraryFragment>::@function::f
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _ @2
-              type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_library_importAugmentation_augmentation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-''');
-    var library = await buildLibrary('''
-@deprecated
-import augment 'a.dart';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      metadata
-        Annotation
-          atSign: @ @0
-          name: SimpleIdentifier
-            token: deprecated @1
-            staticElement: dart:core::<fragment>::@getter::deprecated
-            staticType: null
-          element: dart:core::<fragment>::@getter::deprecated
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  /// Even though the target is not an augmentation, metadata is available.
-  test_metadata_library_importAugmentation_notAugmentation_library() async {
-    var library = await buildLibrary('''
-@deprecated
-import augment 'dart:math';
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    source 'dart:math'
-      enclosingElement: <testLibrary>
-      metadata
-        Annotation
-          atSign: @ @0
-          name: SimpleIdentifier
-            token: deprecated @1
-            staticElement: dart:core::<fragment>::@getter::deprecated
-            staticType: null
-          element: dart:core::<fragment>::@getter::deprecated
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-''');
-  }
-
-  test_metadata_libraryDirective() async {
-    var library = await buildLibrary('@a library L; const a = null;');
-    checkElementText(library, r'''
-library
-  name: L
-  nameOffset: 11
-  reference: <testLibrary>
-  metadata
-    Annotation
-      atSign: @ @0
-      name: SimpleIdentifier
-        token: a @1
-        staticElement: <testLibraryFragment>::@getter::a
-        staticType: null
-      element: <testLibraryFragment>::@getter::a
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @20
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @24
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_methodDeclaration_getter() async {
-    var library =
-        await buildLibrary('const a = null; class C { @a get m => null; }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic m @-1
-              reference: <testLibraryFragment>::@class::C::@field::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            get m @33
-              reference: <testLibraryFragment>::@class::C::@getter::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @26
-                  name: SimpleIdentifier
-                    token: a @27
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-              returnType: dynamic
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_methodDeclaration_method() async {
-    var library = await buildLibrary(r'''
-const a = null;
-const b = null;
-class C {
-  @a
-  @b
-  m() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @38
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            m @54
-              reference: <testLibraryFragment>::@class::C::@method::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @44
-                  name: SimpleIdentifier
-                    token: a @45
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-                Annotation
-                  atSign: @ @49
-                  name: SimpleIdentifier
-                    token: b @50
-                    staticElement: <testLibraryFragment>::@getter::b
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::b
-              returnType: dynamic
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-        static const b @22
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @26
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_methodDeclaration_method_mixin() async {
-    var library = await buildLibrary(r'''
-const a = null;
-const b = null;
-mixin M {
-  @a
-  @b
-  m() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @38
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          methods
-            m @54
-              reference: <testLibraryFragment>::@mixin::M::@method::m
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              metadata
-                Annotation
-                  atSign: @ @44
-                  name: SimpleIdentifier
-                    token: a @45
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-                Annotation
-                  atSign: @ @49
-                  name: SimpleIdentifier
-                    token: b @50
-                    staticElement: <testLibraryFragment>::@getter::b
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::b
-              returnType: dynamic
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-        static const b @22
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @26
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_methodDeclaration_setter() async {
-    var library = await buildLibrary('''
-const a = null;
-class C {
-  @a
-  set m(value) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic m @-1
-              reference: <testLibraryFragment>::@class::C::@field::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            set m= @37
-              reference: <testLibraryFragment>::@class::C::@setter::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              metadata
-                Annotation
-                  atSign: @ @28
-                  name: SimpleIdentifier
-                    token: a @29
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-              parameters
-                requiredPositional value @39
-                  type: dynamic
-              returnType: void
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_mixin_scope() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-mixin M<@foo T> {
-  static const foo = 1;
-  @foo
-  void bar() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @27
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          typeParameters
-            covariant T @34
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @29
-                  name: SimpleIdentifier
-                    token: foo @30
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          superclassConstraints
-            Object
-          fields
-            static const foo @54
-              reference: <testLibraryFragment>::@mixin::M::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 1 @60
-                  staticType: int
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@mixin::M::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              returnType: int
-          methods
-            bar @77
-              reference: <testLibraryFragment>::@mixin::M::@method::bar
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              metadata
-                Annotation
-                  atSign: @ @65
-                  name: SimpleIdentifier
-                    token: foo @66
-                    staticElement: <testLibraryFragment>::@mixin::M::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@mixin::M::@getter::foo
-              returnType: void
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_mixinDeclaration() async {
-    var library = await buildLibrary(r'''
-const a = null;
-const b = null;
-@a
-@b
-mixin M {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @44
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @32
-              name: SimpleIdentifier
-                token: a @33
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-            Annotation
-              atSign: @ @35
-              name: SimpleIdentifier
-                token: b @36
-                staticElement: <testLibraryFragment>::@getter::b
-                staticType: null
-              element: <testLibraryFragment>::@getter::b
-          superclassConstraints
-            Object
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-        static const b @22
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @26
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_offsets_onClass() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-class A<@foo T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @27
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          typeParameters
-            covariant T @34
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @29
-                  name: SimpleIdentifier
-                    token: foo @30
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onClassConstructor() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-class A {
-  @foo
-  A(@foo int a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @22
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @35
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              metadata
-                Annotation
-                  atSign: @ @28
-                  name: SimpleIdentifier
-                    token: foo @29
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-              parameters
-                requiredPositional a @46
-                  type: int
-                  metadata
-                    Annotation
-                      atSign: @ @37
-                      name: SimpleIdentifier
-                        token: foo @38
-                        staticElement: <testLibraryFragment>::@getter::foo
-                        staticType: null
-                      element: <testLibraryFragment>::@getter::foo
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onClassGetter() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-class A {
-  @foo
-  int get getter => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @22
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic getter @-1
-              reference: <testLibraryFragment>::@class::A::@field::getter
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get getter @43
-              reference: <testLibraryFragment>::@class::A::@getter::getter
-              enclosingElement: <testLibraryFragment>::@class::A
-              metadata
-                Annotation
-                  atSign: @ @28
-                  name: SimpleIdentifier
-                    token: foo @29
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-              returnType: int
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onClassMethod() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-class A {
-  @foo
-  void method<@foo T>(@foo int a) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @22
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            method @40
-              reference: <testLibraryFragment>::@class::A::@method::method
-              enclosingElement: <testLibraryFragment>::@class::A
-              metadata
-                Annotation
-                  atSign: @ @28
-                  name: SimpleIdentifier
-                    token: foo @29
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-              typeParameters
-                covariant T @52
-                  defaultType: dynamic
-                  metadata
-                    Annotation
-                      atSign: @ @47
-                      name: SimpleIdentifier
-                        token: foo @48
-                        staticElement: <testLibraryFragment>::@getter::foo
-                        staticType: null
-                      element: <testLibraryFragment>::@getter::foo
-              parameters
-                requiredPositional a @64
-                  type: int
-                  metadata
-                    Annotation
-                      atSign: @ @55
-                      name: SimpleIdentifier
-                        token: foo @56
-                        staticElement: <testLibraryFragment>::@getter::foo
-                        staticType: null
-                      element: <testLibraryFragment>::@getter::foo
-              returnType: void
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onClassSetter() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-class A {
-  @foo
-  set setter(@foo int a) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @22
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic setter @-1
-              reference: <testLibraryFragment>::@class::A::@field::setter
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            set setter= @39
-              reference: <testLibraryFragment>::@class::A::@setter::setter
-              enclosingElement: <testLibraryFragment>::@class::A
-              metadata
-                Annotation
-                  atSign: @ @28
-                  name: SimpleIdentifier
-                    token: foo @29
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-              parameters
-                requiredPositional a @55
-                  type: int
-                  metadata
-                    Annotation
-                      atSign: @ @46
-                      name: SimpleIdentifier
-                        token: foo @47
-                        staticElement: <testLibraryFragment>::@getter::foo
-                        staticType: null
-                      element: <testLibraryFragment>::@getter::foo
-              returnType: void
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onClassTypeAlias() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-class A {}
-mixin M {}
-
-@foo
-class B<@foo T> = A with M;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @22
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class alias B @50
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @39
-              name: SimpleIdentifier
-                token: foo @40
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          typeParameters
-            covariant T @57
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @52
-                  name: SimpleIdentifier
-                    token: foo @53
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          supertype: A
-          mixins
-            M
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-      mixins
-        mixin M @33
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onEnum() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-enum E {
-  @foo e1,
-  e2,
-  @foo e3,
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @26
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          supertype: Enum
-          fields
-            static const enumConstant e1 @37
-              reference: <testLibraryFragment>::@enum::E::@field::e1
-              enclosingElement: <testLibraryFragment>::@enum::E
-              metadata
-                Annotation
-                  atSign: @ @32
-                  name: SimpleIdentifier
-                    token: foo @33
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant e2 @43
-              reference: <testLibraryFragment>::@enum::E::@field::e2
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant e3 @54
-              reference: <testLibraryFragment>::@enum::E::@field::e3
-              enclosingElement: <testLibraryFragment>::@enum::E
-              metadata
-                Annotation
-                  atSign: @ @49
-                  name: SimpleIdentifier
-                    token: foo @50
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: e1 @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::e1
-                      staticType: E
-                    SimpleIdentifier
-                      token: e2 @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::e2
-                      staticType: E
-                    SimpleIdentifier
-                      token: e3 @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::e3
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get e1 @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::e1
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get e2 @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::e2
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get e3 @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::e3
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onExtension() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-extension E<@foo T> on List<T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        E @31
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          typeParameters
-            covariant T @38
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @33
-                  name: SimpleIdentifier
-                    token: foo @34
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          extendedType: List<T>
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onFieldDeclaration() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-class A {
-  @foo
-  static isStatic = 1;
-
-  @foo
-  static const isStaticConst = 2;
-
-  @foo
-  var isInstance = 3;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @22
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            static isStatic @42
-              reference: <testLibraryFragment>::@class::A::@field::isStatic
-              enclosingElement: <testLibraryFragment>::@class::A
-              metadata
-                Annotation
-                  atSign: @ @28
-                  name: SimpleIdentifier
-                    token: foo @29
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-              type: int
-              shouldUseTypeForInitializerInference: false
-            static const isStaticConst @79
-              reference: <testLibraryFragment>::@class::A::@field::isStaticConst
-              enclosingElement: <testLibraryFragment>::@class::A
-              metadata
-                Annotation
-                  atSign: @ @59
-                  name: SimpleIdentifier
-                    token: foo @60
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 2 @95
-                  staticType: int
-            isInstance @112
-              reference: <testLibraryFragment>::@class::A::@field::isInstance
-              enclosingElement: <testLibraryFragment>::@class::A
-              metadata
-                Annotation
-                  atSign: @ @101
-                  name: SimpleIdentifier
-                    token: foo @102
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic static get isStatic @-1
-              reference: <testLibraryFragment>::@class::A::@getter::isStatic
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-            synthetic static set isStatic= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::isStatic
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _isStatic @-1
-                  type: int
-              returnType: void
-            synthetic static get isStaticConst @-1
-              reference: <testLibraryFragment>::@class::A::@getter::isStaticConst
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-            synthetic get isInstance @-1
-              reference: <testLibraryFragment>::@class::A::@getter::isInstance
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-            synthetic set isInstance= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::isInstance
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _isInstance @-1
-                  type: int
-              returnType: void
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onLibrary() async {
-    var library = await buildLibrary('''
-/// Some documentation.
-@foo
-library my.lib;
-
-const foo = 0;
-''');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 37
-  reference: <testLibrary>
-  documentationComment: /// Some documentation.
-  metadata
-    Annotation
-      atSign: @ @24
-      name: SimpleIdentifier
-        token: foo @25
-        staticElement: <testLibraryFragment>::@getter::foo
-        staticType: null
-      element: <testLibraryFragment>::@getter::foo
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const foo @52
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @58
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onMixin() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-mixin A<@foo T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @27
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          typeParameters
-            covariant T @34
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @29
-                  name: SimpleIdentifier
-                    token: foo @30
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          superclassConstraints
-            Object
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onTypeAlias_classic() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-typedef void F<@foo T>(@foo int a);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @34
-          reference: <testLibraryFragment>::@typeAlias::F
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          typeParameters
-            unrelated T @41
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @36
-                  name: SimpleIdentifier
-                    token: foo @37
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          aliasedType: void Function(int)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @53
-                type: int
-                metadata
-                  Annotation
-                    atSign: @ @44
-                    name: SimpleIdentifier
-                      token: foo @45
-                      staticElement: <testLibraryFragment>::@getter::foo
-                      staticType: null
-                    element: <testLibraryFragment>::@getter::foo
-            returnType: void
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onTypeAlias_genericFunctionType() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-typedef A<@foo T> = void Function<@foo U>(@foo int a);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @29
-          reference: <testLibraryFragment>::@typeAlias::A
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          typeParameters
-            unrelated T @36
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @31
-                  name: SimpleIdentifier
-                    token: foo @32
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          aliasedType: void Function<U>(int)
-          aliasedElement: GenericFunctionTypeElement
-            typeParameters
-              covariant U @60
-                metadata
-                  Annotation
-                    atSign: @ @55
-                    name: SimpleIdentifier
-                      token: foo @56
-                      staticElement: <testLibraryFragment>::@getter::foo
-                      staticType: null
-                    element: <testLibraryFragment>::@getter::foo
-            parameters
-              requiredPositional a @72
-                type: int
-                metadata
-                  Annotation
-                    atSign: @ @63
-                    name: SimpleIdentifier
-                      token: foo @64
-                      staticElement: <testLibraryFragment>::@getter::foo
-                      staticType: null
-                    element: <testLibraryFragment>::@getter::foo
-            returnType: void
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onUnit() async {
-    addSource('$testPackageLibPath/a.dart', '''
-part of my.lib;
-''');
-
-    addSource('$testPackageLibPath/b.dart', '''
-part of my.lib;
-''');
-
-    var library = await buildLibrary('''
-library my.lib;
-
-@foo
-part 'a.dart';
-
-@foo
-part 'b.dart';
-
-const foo = 0;
-''');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-    part_1
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @17
-              name: SimpleIdentifier
-                token: foo @18
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          unit: <testLibrary>::@fragment::package:test/a.dart
-        part_1
-          uri: package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @38
-              name: SimpleIdentifier
-                token: foo @39
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          unit: <testLibrary>::@fragment::package:test/b.dart
-      topLevelVariables
-        static const foo @65
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @71
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_metadata_offsets_onUnitFunction() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-void f<@foo T>({@foo int? a = 42}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-      functions
-        f @26
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          typeParameters
-            covariant T @33
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @28
-                  name: SimpleIdentifier
-                    token: foo @29
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          parameters
-            optionalNamed default a @47
-              reference: <testLibraryFragment>::@function::f::@parameter::a
-              type: int?
-              metadata
-                Annotation
-                  atSign: @ @37
-                  name: SimpleIdentifier
-                    token: foo @38
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-              constantInitializer
-                IntegerLiteral
-                  literal: 42 @51
-                  staticType: int
-          returnType: void
-''');
-  }
-
-  test_metadata_offsets_onUnitGetter() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-int get getter => 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-        synthetic static getter @-1
-          reference: <testLibraryFragment>::@topLevelVariable::getter
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        static get getter @29
-          reference: <testLibraryFragment>::@getter::getter
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          returnType: int
-''');
-  }
-
-  test_metadata_offsets_onUnitSetter() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-set setter(@foo int a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-        synthetic static setter @-1
-          reference: <testLibraryFragment>::@topLevelVariable::setter
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        static set setter= @25
-          reference: <testLibraryFragment>::@setter::setter
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          parameters
-            requiredPositional a @41
-              type: int
-              metadata
-                Annotation
-                  atSign: @ @32
-                  name: SimpleIdentifier
-                    token: foo @33
-                    staticElement: <testLibraryFragment>::@getter::foo
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::foo
-          returnType: void
-''');
-  }
-
-  test_metadata_offsets_onUnitVariable() async {
-    var library = await buildLibrary(r'''
-const foo = 0;
-
-@foo
-var isNotConst = 1;
-
-@foo
-const isConst = 2;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const foo @6
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @12
-              staticType: int
-        static isNotConst @25
-          reference: <testLibraryFragment>::@topLevelVariable::isNotConst
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: foo @17
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          type: int
-          shouldUseTypeForInitializerInference: false
-        static const isConst @53
-          reference: <testLibraryFragment>::@topLevelVariable::isConst
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @42
-              name: SimpleIdentifier
-                token: foo @43
-                staticElement: <testLibraryFragment>::@getter::foo
-                staticType: null
-              element: <testLibraryFragment>::@getter::foo
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 2 @63
-              staticType: int
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get isNotConst @-1
-          reference: <testLibraryFragment>::@getter::isNotConst
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set isNotConst= @-1
-          reference: <testLibraryFragment>::@setter::isNotConst
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _isNotConst @-1
-              type: int
-          returnType: void
-        synthetic static get isConst @-1
-          reference: <testLibraryFragment>::@getter::isConst
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_metadata_partDirective() async {
-    addSource('$testPackageLibPath/foo.dart', 'part of L;');
-    var library = await buildLibrary('''
-library L;
-@a
-part 'foo.dart';
-const a = null;''');
-    checkElementText(library, r'''
-library
-  name: L
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/foo.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @11
-              name: SimpleIdentifier
-                token: a @12
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-          unit: <testLibrary>::@fragment::package:test/foo.dart
-      topLevelVariables
-        static const a @37
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @41
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-    <testLibrary>::@fragment::package:test/foo.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_metadata_partDirective2() async {
-    addSource('$testPackageLibPath/a.dart', r'''
-part of 'test.dart';
-''');
-    addSource('$testPackageLibPath/b.dart', r'''
-part of 'test.dart';
-''');
-    var library = await buildLibrary('''
-part 'a.dart';
-part 'b.dart';
-''');
-
-    // The difference with the test above is that we ask the part first.
-    // There was a bug that we were not loading library directives.
-    expect(library.parts[0].metadata, isEmpty);
-  }
-
-  test_metadata_prefixed_variable() async {
-    addSource('$testPackageLibPath/a.dart', 'const b = null;');
-    var library = await buildLibrary('import "a.dart" as a; @a.b class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart as a @19
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    a @19
-      reference: <testLibraryFragment>::@prefix::a
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart as a @19
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        a @19
-          reference: <testLibraryFragment>::@prefix::a
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @33
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @22
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: a @23
-                  staticElement: <testLibraryFragment>::@prefix::a
-                  staticType: null
-                period: . @24
-                identifier: SimpleIdentifier
-                  token: b @25
-                  staticElement: package:test/a.dart::<fragment>::@getter::b
-                  staticType: null
-                staticElement: package:test/a.dart::<fragment>::@getter::b
-                staticType: null
-              element: package:test/a.dart::<fragment>::@getter::b
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_simpleFormalParameter() async {
-    var library = await buildLibrary('const a = null; f(@a x) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-      functions
-        f @16
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional x @21
-              type: dynamic
-              metadata
-                Annotation
-                  atSign: @ @18
-                  name: SimpleIdentifier
-                    token: a @19
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_simpleFormalParameter_method() async {
-    var library = await buildLibrary('''
-const a = null;
-
-class C {
-  m(@a x) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @23
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            m @29
-              reference: <testLibraryFragment>::@class::C::@method::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional x @34
-                  type: dynamic
-                  metadata
-                    Annotation
-                      atSign: @ @31
-                      name: SimpleIdentifier
-                        token: a @32
-                        staticElement: <testLibraryFragment>::@getter::a
-                        staticType: null
-                      element: <testLibraryFragment>::@getter::a
-              returnType: dynamic
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_simpleFormalParameter_unit_setter() async {
-    var library = await buildLibrary('''
-const a = null;
-
-set foo(@a int x) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        static set foo= @21
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional x @32
-              type: int
-              metadata
-                Annotation
-                  atSign: @ @25
-                  name: SimpleIdentifier
-                    token: a @26
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-          returnType: void
-''');
-  }
-
-  test_metadata_simpleFormalParameter_withDefault() async {
-    var library = await buildLibrary('const a = null; f([@a x = null]) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-      functions
-        f @16
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalPositional default x @22
-              type: dynamic
-              metadata
-                Annotation
-                  atSign: @ @19
-                  name: SimpleIdentifier
-                    token: a @20
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-              constantInitializer
-                NullLiteral
-                  literal: null @26
-                  staticType: Null
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_superFormalParameter() async {
-    var library = await buildLibrary('''
-const a = null;
-
-class A {
-  A(int x);
-}
-
-class B extends A {
-  B(@a super.x);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @23
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @29
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional x @35
-                  type: int
-        class B @48
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            @64
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional final super.x @75
-                  type: int
-                  metadata
-                    Annotation
-                      atSign: @ @66
-                      name: SimpleIdentifier
-                        token: a @67
-                        staticElement: <testLibraryFragment>::@getter::a
-                        staticType: null
-                      element: <testLibraryFragment>::@getter::a
-                  superConstructorParameter: <testLibraryFragment>::@class::A::@constructor::new::@parameter::x
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_topLevelVariableDeclaration() async {
-    var library = await buildLibrary('const a = null; @a int v;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-        static v @23
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @16
-              name: SimpleIdentifier
-                token: a @17
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-          type: int
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_metadata_typeParameter_ofClass() async {
-    var library = await buildLibrary('const a = null; class C<@a T> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @27
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @24
-                  name: SimpleIdentifier
-                    token: a @25
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_typeParameter_ofClassTypeAlias() async {
-    var library = await buildLibrary('''
-const a = null;
-class C<@a T> = D with E;
-class D {}
-class E {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class alias C @22
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @27
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @24
-                  name: SimpleIdentifier
-                    token: a @25
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-          supertype: D
-          mixins
-            E
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::D::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::D::@constructor::new
-        class D @48
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-        class E @59
-          reference: <testLibraryFragment>::@class::E
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::E
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_typeParameter_ofFunction() async {
-    var library = await buildLibrary('const a = null; f<@a T>() {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-      functions
-        f @16
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @21
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @18
-                  name: SimpleIdentifier
-                    token: a @19
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_typeParameter_ofTypedef() async {
-    var library = await buildLibrary('const a = null; typedef F<@a T>();');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @24
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated T @29
-              defaultType: dynamic
-              metadata
-                Annotation
-                  atSign: @ @26
-                  name: SimpleIdentifier
-                    token: a @27
-                    staticElement: <testLibraryFragment>::@getter::a
-                    staticType: null
-                  element: <testLibraryFragment>::@getter::a
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            NullLiteral
-              literal: null @10
-              staticType: Null
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_metadata_unit_topLevelVariable_first() async {
-    var library = await buildLibrary(r'''
-const a = 0;
-@a
-int x = 0;
-''');
-    // Check metadata without asking any other properties.
-    var x = _elementOfDefiningUnit(library, ['@topLevelVariable', 'x'])
-        as TopLevelVariableElement;
-    expect(x.metadata, hasLength(1));
-    // Check details.
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @10
-              staticType: int
-        static x @20
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @13
-              name: SimpleIdentifier
-                token: a @14
-                staticElement: <testLibraryFragment>::@getter::a
-                staticType: null
-              element: <testLibraryFragment>::@getter::a
-          type: int
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_metadata_value_class_staticField() async {
-    var library = await buildLibrary('''
-class A {
-  static const x = 0;
-}
-@A.x
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            static const x @25
-              reference: <testLibraryFragment>::@class::A::@field::x
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @29
-                  staticType: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic static get x @-1
-              reference: <testLibraryFragment>::@class::A::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-        class C @45
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @34
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: A @35
-                  staticElement: <testLibraryFragment>::@class::A
-                  staticType: null
-                period: . @36
-                identifier: SimpleIdentifier
-                  token: x @37
-                  staticElement: <testLibraryFragment>::@class::A::@getter::x
-                  staticType: null
-                staticElement: <testLibraryFragment>::@class::A::@getter::x
-                staticType: null
-              element: <testLibraryFragment>::@class::A::@getter::x
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_metadata_value_enum_constant() async {
-    var library = await buildLibrary('''
-enum E {a, b, c}
-@E.b
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @28
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @17
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: E @18
-                  staticElement: <testLibraryFragment>::@enum::E
-                  staticType: null
-                period: . @19
-                identifier: SimpleIdentifier
-                  token: b @20
-                  staticElement: <testLibraryFragment>::@enum::E::@getter::b
-                  staticType: null
-                staticElement: <testLibraryFragment>::@enum::E::@getter::b
-                staticType: null
-              element: <testLibraryFragment>::@enum::E::@getter::b
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant a @8
-              reference: <testLibraryFragment>::@enum::E::@field::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant b @11
-              reference: <testLibraryFragment>::@enum::E::@field::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            static const enumConstant c @14
-              reference: <testLibraryFragment>::@enum::E::@field::c
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: a @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
-                      staticType: E
-                    SimpleIdentifier
-                      token: b @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
-                      staticType: E
-                    SimpleIdentifier
-                      token: c @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::c
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get b @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get c @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::c
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_metadata_value_extension_staticField() async {
-    var library = await buildLibrary('''
-extension E on int {
-  static const x = 0;
-}
-@E.x
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @56
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @45
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: E @46
-                  staticElement: <testLibraryFragment>::@extension::E
-                  staticType: null
-                period: . @47
-                identifier: SimpleIdentifier
-                  token: x @48
-                  staticElement: <testLibraryFragment>::@extension::E::@getter::x
-                  staticType: null
-                staticElement: <testLibraryFragment>::@extension::E::@getter::x
-                staticType: null
-              element: <testLibraryFragment>::@extension::E::@getter::x
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      extensions
-        E @10
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          fields
-            static const x @36
-              reference: <testLibraryFragment>::@extension::E::@field::x
-              enclosingElement: <testLibraryFragment>::@extension::E
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @40
-                  staticType: int
-          accessors
-            synthetic static get x @-1
-              reference: <testLibraryFragment>::@extension::E::@getter::x
-              enclosingElement: <testLibraryFragment>::@extension::E
-              returnType: int
-''');
-  }
-
-  test_metadata_value_prefix_extension_staticField() async {
-    addSource('$testPackageLibPath/foo.dart', '''
-extension E on int {
-  static const x = 0;
-}
-''');
-    var library = await buildLibrary('''
-import 'foo.dart' as foo;
-@foo.E.x
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart as foo @21
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @21
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart as foo @21
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @21
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @41
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @26
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @27
-                  staticElement: <testLibraryFragment>::@prefix::foo
-                  staticType: null
-                period: . @30
-                identifier: SimpleIdentifier
-                  token: E @31
-                  staticElement: package:test/foo.dart::<fragment>::@extension::E
-                  staticType: null
-                staticElement: package:test/foo.dart::<fragment>::@extension::E
-                staticType: null
-              period: . @32
-              constructorName: SimpleIdentifier
-                token: x @33
-                staticElement: package:test/foo.dart::<fragment>::@extension::E::@getter::x
-                staticType: null
-              element: package:test/foo.dart::<fragment>::@extension::E::@getter::x
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_methodInvocation_implicitCall() async {
-    var library = await buildLibrary(r'''
-class A {
-  double call() => 0.0;
-}
-class B {
-  A a;
-}
-var c = new B().a();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            call @19
-              reference: <testLibraryFragment>::@class::A::@method::call
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: double
-        class B @42
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          fields
-            a @50
-              reference: <testLibraryFragment>::@class::B::@field::a
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-          accessors
-            synthetic get a @-1
-              reference: <testLibraryFragment>::@class::B::@getter::a
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: A
-            synthetic set a= @-1
-              reference: <testLibraryFragment>::@class::B::@setter::a
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional _a @-1
-                  type: A
-              returnType: void
-      topLevelVariables
-        static c @59
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: double
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: double
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: double
-          returnType: void
-''');
-  }
-
-  test_mixin() async {
-    var library = await buildLibrary(r'''
-class A {}
-class B {}
-class C {}
-class D {}
-
-mixin M<T extends num, U> on A, B implements C, D {
-  T f;
-  U get g => 0;
-  set s(int v) {}
-  int m(double v) => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @17
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @28
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @39
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-      mixins
-        mixin M @51
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @53
-              bound: num
-              defaultType: num
-            covariant U @68
-              defaultType: dynamic
-          superclassConstraints
-            A
-            B
-          interfaces
-            C
-            D
-          fields
-            f @101
-              reference: <testLibraryFragment>::@mixin::M::@field::f
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: T
-            synthetic g @-1
-              reference: <testLibraryFragment>::@mixin::M::@field::g
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: U
-            synthetic s @-1
-              reference: <testLibraryFragment>::@mixin::M::@field::s
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@mixin::M::@getter::f
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              returnType: T
-            synthetic set f= @-1
-              reference: <testLibraryFragment>::@mixin::M::@setter::f
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              parameters
-                requiredPositional _f @-1
-                  type: T
-              returnType: void
-            get g @112
-              reference: <testLibraryFragment>::@mixin::M::@getter::g
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              returnType: U
-            set s= @126
-              reference: <testLibraryFragment>::@mixin::M::@setter::s
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              parameters
-                requiredPositional v @132
-                  type: int
-              returnType: void
-          methods
-            m @144
-              reference: <testLibraryFragment>::@mixin::M::@method::m
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              parameters
-                requiredPositional v @153
-                  type: double
-              returnType: int
-''');
-  }
-
-  test_mixin_base() async {
-    var library = await buildLibrary(r'''
-base mixin M on A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        base mixin M @11
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_mixin_field_inferredType_final() async {
-    var library = await buildLibrary('''
-mixin M {
-  final x = 0;
-}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@mixin::M::@field::x
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int
-              shouldUseTypeForInitializerInference: false
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@mixin::M::@getter::x
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              returnType: int
-''');
-  }
-
-  test_mixin_first() async {
-    var library = await buildLibrary(r'''
-mixin M {}
-''');
-
-    // We intentionally ask `mixins` directly, to check that we can ask them
-    // separately, without asking classes.
-    var mixins = library.definingCompilationUnit.mixins;
-    expect(mixins, hasLength(1));
-    expect(mixins[0].name, 'M');
-  }
-
-  test_mixin_getter_invokesSuperSelf_getter() async {
-    var library = await buildLibrary(r'''
-mixin M on A {
-  int get foo {
-    super.foo;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@mixin::M::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int
-          accessors
-            get foo @25 invokesSuperSelf
-              reference: <testLibraryFragment>::@mixin::M::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              returnType: int
-''');
-  }
-
-  test_mixin_getter_invokesSuperSelf_getter_nestedInAssignment() async {
-    var library = await buildLibrary(r'''
-mixin M on A {
-  int get foo {
-    (super.foo).foo = 0;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@mixin::M::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int
-          accessors
-            get foo @25 invokesSuperSelf
-              reference: <testLibraryFragment>::@mixin::M::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              returnType: int
-''');
-  }
-
-  test_mixin_getter_invokesSuperSelf_setter() async {
-    var library = await buildLibrary(r'''
-mixin M on A {
-  int get foo {
-    super.foo = 0;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@mixin::M::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int
-          accessors
-            get foo @25
-              reference: <testLibraryFragment>::@mixin::M::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              returnType: int
-''');
-  }
-
-  test_mixin_implicitObjectSuperclassConstraint() async {
-    var library = await buildLibrary(r'''
-mixin M {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_mixin_inference() async {
-    var library = await buildLibrary(r'''
-class A<T> {}
-mixin M<U> on A<U> {}
-class B extends A<int> with M {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @42
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A<int>
-          mixins
-            M<int>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: int}
-      mixins
-        mixin M @20
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U @22
-              defaultType: dynamic
-          superclassConstraints
-            A<U>
-''');
-  }
-
-  test_mixin_inference_classAlias_oneMixin() async {
-    // In the code below, B's superclass constraints don't include A, because
-    // superclass constraints are determined from the mixin's superclass, and
-    // B's superclass is Object.  So no mixin type inference is attempted, and
-    // "with B" is interpreted as "with B<dynamic>".
-    var library = await buildLibrary(r'''
-class A<T> {}
-class B<T> = Object with A<T>;
-class C = A<int> with B;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class alias B @20
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @22
-              defaultType: dynamic
-          supertype: Object
-          mixins
-            A<T>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-        class alias C @51
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: A<int>
-          mixins
-            B<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: int}
-''');
-  }
-
-  test_mixin_inference_classAlias_twoMixins() async {
-    // In the code below, `B` has a single superclass constraint, A1, because
-    // superclass constraints are determined from the mixin's superclass, and
-    // B's superclass is "Object with A1<T>".  So mixin type inference succeeds
-    // (since C's base class implements A1<int>), and "with B" is interpreted as
-    // "with B<int>".
-    var library = await buildLibrary(r'''
-class A1<T> {}
-class A2<T> {}
-class B<T> = Object with A1<T>, A2<T>;
-class Base implements A1<int> {}
-class C = Base with B;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A1 @6
-          reference: <testLibraryFragment>::@class::A1
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @9
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A1
-        class A2 @21
-          reference: <testLibraryFragment>::@class::A2
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @24
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A2::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A2
-        class alias B @36
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @38
-              defaultType: dynamic
-          supertype: Object
-          mixins
-            A1<T>
-            A2<T>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: dart:core::<fragment>::@class::Object::@constructor::new
-        class Base @75
-          reference: <testLibraryFragment>::@class::Base
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            A1<int>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::Base::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::Base
-        class alias C @108
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: Base
-          mixins
-            B<int>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::Base::@constructor::new
-              superConstructor: <testLibraryFragment>::@class::Base::@constructor::new
-''');
-  }
-
-  test_mixin_inference_nested_functionType() async {
-    var library = await buildLibrary(r'''
-class A<T> {}
-mixin M<T, U> on A<T Function(U)> {}
-class C extends A<int Function(String)> with M {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class C @57
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: A<int Function(String)>
-          mixins
-            M<int, String>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: int Function(String)}
-      mixins
-        mixin M @20
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @22
-              defaultType: dynamic
-            covariant U @25
-              defaultType: dynamic
-          superclassConstraints
-            A<T Function(U)>
-''');
-  }
-
-  test_mixin_inference_nested_interfaceType() async {
-    var library = await buildLibrary(r'''
-abstract class A<T> {}
-mixin M<T> on A<List<T>> {}
-class C extends A<List<int>> with M {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        abstract class A @15
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @17
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class C @57
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          supertype: A<List<int>>
-          mixins
-            M<int>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: List<int>}
-      mixins
-        mixin M @29
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @31
-              defaultType: dynamic
-          superclassConstraints
-            A<List<T>>
-''');
-  }
-
-  test_mixin_inference_twoMixins() async {
-    // Both `M1` and `M2` have their type arguments inferred.
-    var library = await buildLibrary(r'''
-class I<X> {}
-mixin M1<T> on I<T> {}
-mixin M2<T> on I<T> {}
-class A = I<int> with M1, M2;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I @6
-          reference: <testLibraryFragment>::@class::I
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant X @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I
-        class alias A @66
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          supertype: I<int>
-          mixins
-            M1<int>
-            M2<int>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::I::@constructor::new
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::I::@constructor::new
-                substitution: {X: int}
-      mixins
-        mixin M1 @20
-          reference: <testLibraryFragment>::@mixin::M1
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @23
-              defaultType: dynamic
-          superclassConstraints
-            I<T>
-        mixin M2 @43
-          reference: <testLibraryFragment>::@mixin::M2
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @46
-              defaultType: dynamic
-          superclassConstraints
-            I<T>
-''');
-  }
-
-  test_mixin_inference_viaTypeAlias() async {
-    var library = await buildLibrary(r'''
-mixin M<T, U> on S<T> {}
-
-typedef M2<T2> = M<T2, int>;
-
-class S<T3> {}
-
-class X extends S<String> with M2 {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class S @62
-          reference: <testLibraryFragment>::@class::S
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T3 @64
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::S::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::S
-        class X @78
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          supertype: S<String>
-          mixins
-            M<String, int>
-              alias: <testLibraryFragment>::@typeAlias::M2
-                typeArguments
-                  String
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::S::@constructor::new
-                substitution: {T3: String}
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          superclassConstraints
-            S<T>
-      typeAliases
-        M2 @34
-          reference: <testLibraryFragment>::@typeAlias::M2
-          typeParameters
-            covariant T2 @37
-              defaultType: dynamic
-          aliasedType: M<T2, int>
-''');
-  }
-
-  test_mixin_inference_viaTypeAlias2() async {
-    var library = await buildLibrary(r'''
-mixin M<T, U> on S<T> {}
-
-typedef M2<T2> = M<T2, int>;
-
-typedef M3<T3> = M2<T3>;
-
-class S<T4> {}
-
-class X extends S<String> with M3 {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class S @88
-          reference: <testLibraryFragment>::@class::S
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T4 @90
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::S::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::S
-        class X @104
-          reference: <testLibraryFragment>::@class::X
-          enclosingElement: <testLibraryFragment>
-          supertype: S<String>
-          mixins
-            M<String, int>
-              alias: <testLibraryFragment>::@typeAlias::M3
-                typeArguments
-                  String
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::X::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::X
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::S::@constructor::new
-                substitution: {T4: String}
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          superclassConstraints
-            S<T>
-      typeAliases
-        M2 @34
-          reference: <testLibraryFragment>::@typeAlias::M2
-          typeParameters
-            covariant T2 @37
-              defaultType: dynamic
-          aliasedType: M<T2, int>
-        M3 @64
-          reference: <testLibraryFragment>::@typeAlias::M3
-          typeParameters
-            covariant T3 @67
-              defaultType: dynamic
-          aliasedType: M<T3, int>
-            alias: <testLibraryFragment>::@typeAlias::M2
-              typeArguments
-                T3
-''');
-  }
-
-  test_mixin_interfaces_extensionType() async {
-    var library = await buildLibrary(r'''
-class A {}
-extension type B(int it) {}
-class C {}
-mixin M implements A, B, C {}
-''');
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-        class C @45
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-      extensionTypes
-        B @26
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: int
-          fields
-            final it @32
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: int
-      mixins
-        mixin M @56
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          interfaces
-            A
-            C
-''');
-  }
-
-  test_mixin_method_invokesSuperSelf() async {
-    var library = await buildLibrary(r'''
-mixin M on A {
-  void foo() {
-    super.foo();
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          methods
-            foo @22 invokesSuperSelf
-              reference: <testLibraryFragment>::@mixin::M::@method::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              returnType: void
-''');
-  }
-
-  test_mixin_method_namedAsConstraint() async {
-    var library = await buildLibrary(r'''
-class A {}
-mixin B on A {
-  void A() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      mixins
-        mixin B @17
-          reference: <testLibraryFragment>::@mixin::B
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            A
-          methods
-            A @33
-              reference: <testLibraryFragment>::@mixin::B::@method::A
-              enclosingElement: <testLibraryFragment>::@mixin::B
-              returnType: void
-''');
-  }
-
-  test_mixin_setter_invokesSuperSelf_getter() async {
-    var library = await buildLibrary(r'''
-mixin M on A {
-  set foo(int _) {
-    super.foo;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@mixin::M::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int
-          accessors
-            set foo= @21
-              reference: <testLibraryFragment>::@mixin::M::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              parameters
-                requiredPositional _ @29
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_mixin_setter_invokesSuperSelf_setter() async {
-    var library = await buildLibrary(r'''
-mixin M on A {
-  set foo(int _) {
-    super.foo = 0;
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@mixin::M::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int
-          accessors
-            set foo= @21 invokesSuperSelf
-              reference: <testLibraryFragment>::@mixin::M::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              parameters
-                requiredPositional _ @29
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_mixin_superclassConstraints_extensionType() async {
-    var library = await buildLibrary(r'''
-class A {}
-extension type B(int it) {}
-class C {}
-mixin M on A, B, C {}
-''');
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-        class C @45
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-      extensionTypes
-        B @26
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: int
-          fields
-            final it @32
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: int
-      mixins
-        mixin M @56
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            A
-            C
-''');
-  }
-
-  test_mixin_typeParameters_variance_contravariant() async {
-    var library = await buildLibrary('mixin M<in T> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            contravariant T @11
-              defaultType: dynamic
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_mixin_typeParameters_variance_covariant() async {
-    var library = await buildLibrary('mixin M<out T> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @12
-              defaultType: dynamic
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_mixin_typeParameters_variance_invariant() async {
-    var library = await buildLibrary('mixin M<inout T> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            invariant T @14
-              defaultType: dynamic
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_mixin_typeParameters_variance_multiple() async {
-    var library = await buildLibrary('mixin M<inout T, in U, out V> {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            invariant T @14
-              defaultType: dynamic
-            contravariant U @20
-              defaultType: dynamic
-            covariant V @27
-              defaultType: dynamic
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_nameConflict_exportedAndLocal() async {
-    addSource('$testPackageLibPath/a.dart', 'class C {}');
-    addSource('$testPackageLibPath/c.dart', '''
-export 'a.dart';
-class C {}
-''');
-    var library = await buildLibrary('''
-import 'c.dart';
-C v = null;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/c.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/c.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static v @19
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: C
-          returnType: void
-''');
-  }
-
-  test_nameConflict_exportedAndLocal_exported() async {
-    addSource('$testPackageLibPath/a.dart', 'class C {}');
-    addSource('$testPackageLibPath/c.dart', '''
-export 'a.dart';
-class C {}
-''');
-    addSource('$testPackageLibPath/d.dart', 'export "c.dart";');
-    var library = await buildLibrary('''
-import 'd.dart';
-C v = null;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/d.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/d.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static v @19
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: C
-          returnType: void
-''');
-  }
-
-  test_nameConflict_exportedAndParted() async {
-    addSource('$testPackageLibPath/a.dart', 'class C {}');
-    addSource('$testPackageLibPath/b.dart', '''
-part of lib;
-class C {}
-''');
-    addSource('$testPackageLibPath/c.dart', '''
-library lib;
-export 'a.dart';
-part 'b.dart';
-''');
-    var library = await buildLibrary('''
-import 'c.dart';
-C v = null;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/c.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/c.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static v @19
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: C
-          returnType: void
-''');
-  }
-
-  test_nameConflict_importWithRelativeUri_exportWithAbsolute() async {
-    if (resourceProvider.pathContext.separator != '/') {
-      return;
-    }
-
-    addSource('$testPackageLibPath/a.dart', 'class A {}');
-    addSource('$testPackageLibPath/b.dart', 'export "/a.dart";');
-    var library = await buildLibrary('''
-import 'a.dart';
-import 'b.dart';
-A v = null;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static v @36
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: A
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: A
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: A
-          returnType: void
-''');
-  }
-
-  test_nameOffset_class_constructor() async {
-    var library = await buildLibrary(r'''
-class A {
-  A();
-  A.named();
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-            named @21
-              reference: <testLibraryFragment>::@class::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::A
-              periodOffset: 20
-              nameEnd: 26
-''');
-  }
-
-  test_nameOffset_class_constructor_parameter() async {
-    var library = await buildLibrary(r'''
-class A {
-  A(int a);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @18
-                  type: int
-''');
-  }
-
-  test_nameOffset_class_field() async {
-    var library = await buildLibrary(r'''
-class A {
-  int foo = 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            foo @16
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_nameOffset_class_getter() async {
-    var library = await buildLibrary(r'''
-class A {
-  int get foo => 0;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            get foo @20
-              reference: <testLibraryFragment>::@class::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-''');
-  }
-
-  test_nameOffset_class_method() async {
-    var library = await buildLibrary(r'''
-class A {
-  void foo<T>(int a) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @17
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              typeParameters
-                covariant T @21
-                  defaultType: dynamic
-              parameters
-                requiredPositional a @28
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_nameOffset_class_setter() async {
-    var library = await buildLibrary(r'''
-class A {
-  set foo(int x) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            set foo= @16
-              reference: <testLibraryFragment>::@class::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional x @24
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_nameOffset_class_typeParameter() async {
-    var library = await buildLibrary(r'''
-class A<T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_nameOffset_extension_typeParameter() async {
-    var library = await buildLibrary(r'''
-extension E<T> on int {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        E @10
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @12
-              defaultType: dynamic
-          extendedType: int
-''');
-  }
-
-  test_nameOffset_function_functionTypedFormal_parameter() async {
-    var library = await buildLibrary(r'''
-void f(void f<U>(int a)) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          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 buildLibrary(r'''
-void f({required void f<U>(int a)}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredNamed default f @22
-              reference: <testLibraryFragment>::@function::f::@parameter::f
-              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 buildLibrary(r'''
-void f<T>() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-          returnType: void
-''');
-  }
-
-  test_nameOffset_functionTypeAlias_typeParameter() async {
-    var library = await buildLibrary(r'''
-typedef void F<T>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated T @15
-              defaultType: dynamic
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_nameOffset_genericTypeAlias_typeParameter() async {
-    var library = await buildLibrary(r'''
-typedef F<T> = void Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated T @10
-              defaultType: dynamic
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_nameOffset_mixin_typeParameter() async {
-    var library = await buildLibrary(r'''
-mixin M<T> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_nameOffset_unit_getter() async {
-    var library = await buildLibrary(r'''
-int get foo => 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static get foo @8
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_nested_generic_functions_in_generic_class_with_function_typed_params() async {
-    var library = await buildLibrary('''
-class C<T, U> {
-  void g<V, W>() {
-    void h<X, Y>(void p(T t, U u, V v, W w, X x, Y y)) {
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            g @23
-              reference: <testLibraryFragment>::@class::C::@method::g
-              enclosingElement: <testLibraryFragment>::@class::C
-              typeParameters
-                covariant V @25
-                  defaultType: dynamic
-                covariant W @28
-                  defaultType: dynamic
-              returnType: void
-''');
-  }
-
-  test_nested_generic_functions_in_generic_class_with_local_variables() async {
-    var library = await buildLibrary('''
-class C<T, U> {
-  void g<V, W>() {
-    void h<X, Y>() {
-      T t;
-      U u;
-      V v;
-      W w;
-      X x;
-      Y y;
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            g @23
-              reference: <testLibraryFragment>::@class::C::@method::g
-              enclosingElement: <testLibraryFragment>::@class::C
-              typeParameters
-                covariant V @25
-                  defaultType: dynamic
-                covariant W @28
-                  defaultType: dynamic
-              returnType: void
-''');
-  }
-
-  test_nested_generic_functions_with_function_typed_param() async {
-    var library = await buildLibrary('''
-void f<T, U>() {
-  void g<V, W>() {
-    void h<X, Y>(void p(T t, U u, V v, W w, X x, Y y)) {
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-            covariant U @10
-              defaultType: dynamic
-          returnType: void
-''');
-  }
-
-  test_nested_generic_functions_with_local_variables() async {
-    var library = await buildLibrary('''
-void f<T, U>() {
-  void g<V, W>() {
-    void h<X, Y>() {
-      T t;
-      U u;
-      V v;
-      W w;
-      X x;
-      Y y;
-    }
-  }
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-            covariant U @10
-              defaultType: dynamic
-          returnType: void
-''');
-  }
-
-  test_new_typedef_function_notSimplyBounded_functionType_returnType() async {
-    var library = await buildLibrary('''
-typedef F = G Function();
-typedef G = F Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        notSimplyBounded F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-        notSimplyBounded G @34
-          reference: <testLibraryFragment>::@typeAlias::G
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-''');
-  }
-
-  test_new_typedef_function_notSimplyBounded_functionType_returnType_viaInterfaceType() async {
-    var library = await buildLibrary('''
-typedef F = List<F> Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        notSimplyBounded F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: List<dynamic> Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: List<dynamic>
-''');
-  }
-
-  test_new_typedef_function_notSimplyBounded_self() async {
-    var library = await buildLibrary('''
-typedef F<T extends F> = void Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        notSimplyBounded F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated T @10
-              bound: dynamic
-              defaultType: dynamic
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_new_typedef_function_notSimplyBounded_simple_no_bounds() async {
-    var library = await buildLibrary('''
-typedef F<T> = void Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated T @10
-              defaultType: dynamic
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_new_typedef_function_notSimplyBounded_simple_non_generic() async {
-    var library = await buildLibrary('''
-typedef F = void Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_new_typedef_nonFunction_notSimplyBounded_self() async {
-    var library = await buildLibrary('''
-typedef F<T extends F> = List<int>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        notSimplyBounded F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated T @10
-              bound: dynamic
-              defaultType: dynamic
-          aliasedType: List<int>
-''');
-  }
-
-  test_new_typedef_nonFunction_notSimplyBounded_viaInterfaceType() async {
-    var library = await buildLibrary('''
-typedef F = List<F>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        notSimplyBounded F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: List<dynamic>
-''');
-  }
-
-  test_nonSynthetic_class_field() async {
-    var library = await buildLibrary(r'''
-class C {
-  int foo = 0;
-}
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            foo @16
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              shouldUseTypeForInitializerInference: true
-              nonSynthetic: <testLibraryFragment>::@class::C::@field::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              nonSynthetic: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@class::C::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-              nonSynthetic: <testLibraryFragment>::@class::C::@field::foo
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-                  nonSynthetic: <testLibraryFragment>::@class::C::@field::foo
-              returnType: void
-              nonSynthetic: <testLibraryFragment>::@class::C::@field::foo
-''');
-  }
-
-  test_nonSynthetic_class_getter() async {
-    var library = await buildLibrary(r'''
-class C {
-  int get foo => 0;
-}
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              nonSynthetic: <testLibraryFragment>::@class::C::@getter::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              nonSynthetic: <testLibraryFragment>::@class::C
-          accessors
-            get foo @20
-              reference: <testLibraryFragment>::@class::C::@getter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int
-              nonSynthetic: <testLibraryFragment>::@class::C::@getter::foo
-''');
-  }
-
-  test_nonSynthetic_class_setter() async {
-    var library = await buildLibrary(r'''
-class C {
-  set foo(int value) {}
-}
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@class::C::@field::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int
-              nonSynthetic: <testLibraryFragment>::@class::C::@setter::foo
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              nonSynthetic: <testLibraryFragment>::@class::C
-          accessors
-            set foo= @16
-              reference: <testLibraryFragment>::@class::C::@setter::foo
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional value @24
-                  type: int
-                  nonSynthetic: <testLibraryFragment>::@class::C::@setter::foo::@parameter::value
-              returnType: void
-              nonSynthetic: <testLibraryFragment>::@class::C::@setter::foo
-''');
-  }
-
-  test_nonSynthetic_enum() async {
-    var library = await buildLibrary(r'''
-enum E {
-  a, b
-}
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant a @11
-              reference: <testLibraryFragment>::@enum::E::@field::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-              nonSynthetic: <testLibraryFragment>::@enum::E::@field::a
-            static const enumConstant b @14
-              reference: <testLibraryFragment>::@enum::E::@field::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-              nonSynthetic: <testLibraryFragment>::@enum::E::@field::b
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: a @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::a
-                      staticType: E
-                    SimpleIdentifier
-                      token: b @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::b
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-              nonSynthetic: <testLibraryFragment>::@enum::E
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-              nonSynthetic: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::a
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-              nonSynthetic: <testLibraryFragment>::@enum::E::@field::a
-            synthetic static get b @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::b
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-              nonSynthetic: <testLibraryFragment>::@enum::E::@field::b
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-              nonSynthetic: <testLibraryFragment>::@enum::E
-''');
-  }
-
-  test_nonSynthetic_extension_getter() async {
-    var library = await buildLibrary(r'''
-extension E on int {
-  int get foo => 0;
-}
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        E @10
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@extension::E::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::E
-              type: int
-              nonSynthetic: <testLibraryFragment>::@extension::E::@getter::foo
-          accessors
-            get foo @31
-              reference: <testLibraryFragment>::@extension::E::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::E
-              returnType: int
-              nonSynthetic: <testLibraryFragment>::@extension::E::@getter::foo
-''');
-  }
-
-  test_nonSynthetic_extension_setter() async {
-    var library = await buildLibrary(r'''
-extension E on int {
-  set foo(int value) {}
-}
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        E @10
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@extension::E::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::E
-              type: int
-              nonSynthetic: <testLibraryFragment>::@extension::E::@setter::foo
-          accessors
-            set foo= @27
-              reference: <testLibraryFragment>::@extension::E::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extension::E
-              parameters
-                requiredPositional value @35
-                  type: int
-                  nonSynthetic: <testLibraryFragment>::@extension::E::@setter::foo::@parameter::value
-              returnType: void
-              nonSynthetic: <testLibraryFragment>::@extension::E::@setter::foo
-''');
-  }
-
-  test_nonSynthetic_mixin_field() async {
-    var library = await buildLibrary(r'''
-mixin M {
-  int foo = 0;
-}
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            foo @16
-              reference: <testLibraryFragment>::@mixin::M::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int
-              shouldUseTypeForInitializerInference: true
-              nonSynthetic: <testLibraryFragment>::@mixin::M::@field::foo
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@mixin::M::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              returnType: int
-              nonSynthetic: <testLibraryFragment>::@mixin::M::@field::foo
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@mixin::M::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-                  nonSynthetic: <testLibraryFragment>::@mixin::M::@field::foo
-              returnType: void
-              nonSynthetic: <testLibraryFragment>::@mixin::M::@field::foo
-''');
-  }
-
-  test_nonSynthetic_mixin_getter() async {
-    var library = await buildLibrary(r'''
-mixin M {
-  int get foo => 0;
-}
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@mixin::M::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int
-              nonSynthetic: <testLibraryFragment>::@mixin::M::@getter::foo
-          accessors
-            get foo @20
-              reference: <testLibraryFragment>::@mixin::M::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              returnType: int
-              nonSynthetic: <testLibraryFragment>::@mixin::M::@getter::foo
-''');
-  }
-
-  test_nonSynthetic_mixin_setter() async {
-    var library = await buildLibrary(r'''
-mixin M {
-  set foo(int value) {}
-}
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@mixin::M::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              type: int
-              nonSynthetic: <testLibraryFragment>::@mixin::M::@setter::foo
-          accessors
-            set foo= @16
-              reference: <testLibraryFragment>::@mixin::M::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::M
-              parameters
-                requiredPositional value @24
-                  type: int
-                  nonSynthetic: <testLibraryFragment>::@mixin::M::@setter::foo::@parameter::value
-              returnType: void
-              nonSynthetic: <testLibraryFragment>::@mixin::M::@setter::foo
-''');
-  }
-
-  test_nonSynthetic_unit_getter() async {
-    var library = await buildLibrary(r'''
-int get foo => 0;
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          nonSynthetic: <testLibraryFragment>::@getter::foo
-      accessors
-        static get foo @8
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          nonSynthetic: <testLibraryFragment>::@getter::foo
-''');
-  }
-
-  test_nonSynthetic_unit_getterSetter() async {
-    var library = await buildLibrary(r'''
-int get foo => 0;
-set foo(int value) {}
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          nonSynthetic: <testLibraryFragment>::@getter::foo
-      accessors
-        static get foo @8
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          nonSynthetic: <testLibraryFragment>::@getter::foo
-        static set foo= @22
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional value @30
-              type: int
-              nonSynthetic: <testLibraryFragment>::@setter::foo::@parameter::value
-          returnType: void
-          nonSynthetic: <testLibraryFragment>::@setter::foo
-''');
-  }
-
-  test_nonSynthetic_unit_setter() async {
-    var library = await buildLibrary(r'''
-set foo(int value) {}
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          nonSynthetic: <testLibraryFragment>::@setter::foo
-      accessors
-        static set foo= @4
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional value @12
-              type: int
-              nonSynthetic: <testLibraryFragment>::@setter::foo::@parameter::value
-          returnType: void
-          nonSynthetic: <testLibraryFragment>::@setter::foo
-''');
-  }
-
-  test_nonSynthetic_unit_variable() async {
-    var library = await buildLibrary(r'''
-int foo = 0;
-''');
-    configuration.withNonSynthetic = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static foo @4
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          nonSynthetic: <testLibraryFragment>::@topLevelVariable::foo
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          nonSynthetic: <testLibraryFragment>::@topLevelVariable::foo
-        synthetic static set foo= @-1
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _foo @-1
-              type: int
-              nonSynthetic: <testLibraryFragment>::@topLevelVariable::foo
-          returnType: void
-          nonSynthetic: <testLibraryFragment>::@topLevelVariable::foo
-''');
-  }
-
-  test_parameter() async {
-    var library = await buildLibrary('void main(int p) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        main @5
-          reference: <testLibraryFragment>::@function::main
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional p @14
-              type: int
-          returnType: void
-''');
-  }
-
-  test_parameter_covariant_explicit_named() async {
-    var library = await buildLibrary('''
-class A {
-  void m({covariant A a}) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            m @17
-              reference: <testLibraryFragment>::@class::A::@method::m
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                optionalNamed default covariant a @32
-                  reference: <testLibraryFragment>::@class::A::@method::m::@parameter::a
-                  type: A
-              returnType: void
-''');
-  }
-
-  test_parameter_covariant_explicit_positional() async {
-    var library = await buildLibrary('''
-class A {
-  void m([covariant A a]) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            m @17
-              reference: <testLibraryFragment>::@class::A::@method::m
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                optionalPositional default covariant a @32
-                  type: A
-              returnType: void
-''');
-  }
-
-  test_parameter_covariant_explicit_required() async {
-    var library = await buildLibrary('''
-class A {
-  void m(covariant A a) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            m @17
-              reference: <testLibraryFragment>::@class::A::@method::m
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional covariant a @31
-                  type: A
-              returnType: void
-''');
-  }
-
-  test_parameter_covariant_inherited() async {
-    var library = await buildLibrary(r'''
-class A<T> {
-  void f(covariant T t) {}
-}
-class B<T> extends A<T> {
-  void f(T t) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            f @20
-              reference: <testLibraryFragment>::@class::A::@method::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional covariant t @34
-                  type: T
-              returnType: void
-        class B @48
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @50
-              defaultType: dynamic
-          supertype: A<T>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: T}
-          methods
-            f @75
-              reference: <testLibraryFragment>::@class::B::@method::f
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional covariant t @79
-                  type: T
-              returnType: void
-''');
-  }
-
-  test_parameter_covariant_inherited_named() async {
-    var library = await buildLibrary('''
-class A {
-  void m({covariant A a}) {}
-}
-class B extends A {
-  void m({B a}) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            m @17
-              reference: <testLibraryFragment>::@class::A::@method::m
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                optionalNamed default covariant a @32
-                  reference: <testLibraryFragment>::@class::A::@method::m::@parameter::a
-                  type: A
-              returnType: void
-        class B @47
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-          methods
-            m @68
-              reference: <testLibraryFragment>::@class::B::@method::m
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                optionalNamed default covariant a @73
-                  reference: <testLibraryFragment>::@class::B::@method::m::@parameter::a
-                  type: B
-              returnType: void
-''');
-  }
-
-  test_parameter_parameters() async {
-    var library = await buildLibrary('class C { f(g(x, y)) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @10
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              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 buildLibrary('class C<A, B> { f(A g(B x)) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant A @8
-              defaultType: dynamic
-            covariant B @11
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @16
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional g @20
-                  type: A Function(B)
-                  parameters
-                    requiredPositional x @24
-                      type: B
-              returnType: dynamic
-''');
-  }
-
-  test_parameter_return_type() async {
-    var library = await buildLibrary('class C { f(int g()) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @10
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional g @16
-                  type: int Function()
-              returnType: dynamic
-''');
-  }
-
-  test_parameter_return_type_void() async {
-    var library = await buildLibrary('class C { f(void g()) {} }');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @10
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional g @17
-                  type: void Function()
-              returnType: dynamic
-''');
-  }
-
-  test_parameter_typeParameters() async {
-    var library = await buildLibrary(r'''
-void f(T a<T, U>(U u)) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          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
-''');
-  }
-
-  test_parameterTypeNotInferred_constructor() async {
-    // Strong mode doesn't do type inference on constructor parameters, so it's
-    // ok that we don't store inferred type info for them in summaries.
-    var library = await buildLibrary('''
-class C {
-  C.positional([x = 1]);
-  C.named({x: 1});
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            positional @14
-              reference: <testLibraryFragment>::@class::C::@constructor::positional
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 13
-              nameEnd: 24
-              parameters
-                optionalPositional default x @26
-                  type: dynamic
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 1 @30
-                      staticType: int
-            named @39
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 38
-              nameEnd: 44
-              parameters
-                optionalNamed default x @46
-                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::x
-                  type: dynamic
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 1 @49
-                      staticType: int
-''');
-  }
-
-  test_parameterTypeNotInferred_initializingFormal() async {
-    // Strong mode doesn't do type inference on initializing formals, so it's
-    // ok that we don't store inferred type info for them in summaries.
-    var library = await buildLibrary('''
-class C {
-  var x;
-  C.positional([this.x = 1]);
-  C.named({this.x: 1});
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            x @16
-              reference: <testLibraryFragment>::@class::C::@field::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: dynamic
-          constructors
-            positional @23
-              reference: <testLibraryFragment>::@class::C::@constructor::positional
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 22
-              nameEnd: 33
-              parameters
-                optionalPositional default final this.x @40
-                  type: dynamic
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 1 @44
-                      staticType: int
-                  field: <testLibraryFragment>::@class::C::@field::x
-            named @53
-              reference: <testLibraryFragment>::@class::C::@constructor::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              periodOffset: 52
-              nameEnd: 58
-              parameters
-                optionalNamed default final this.x @65
-                  reference: <testLibraryFragment>::@class::C::@constructor::named::@parameter::x
-                  type: dynamic
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 1 @68
-                      staticType: int
-                  field: <testLibraryFragment>::@class::C::@field::x
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::C::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: dynamic
-            synthetic set x= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::x
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _x @-1
-                  type: dynamic
-              returnType: void
-''');
-  }
-
-  test_parameterTypeNotInferred_staticMethod() async {
-    // Strong mode doesn't do type inference on parameters of static methods,
-    // so it's ok that we don't store inferred type info for them in summaries.
-    var library = await buildLibrary('''
-class C {
-  static void positional([x = 1]) {}
-  static void named({x: 1}) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            static positional @24
-              reference: <testLibraryFragment>::@class::C::@method::positional
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalPositional default x @36
-                  type: dynamic
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 1 @40
-                      staticType: int
-              returnType: void
-            static named @61
-              reference: <testLibraryFragment>::@class::C::@method::named
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                optionalNamed default x @68
-                  reference: <testLibraryFragment>::@class::C::@method::named::@parameter::x
-                  type: dynamic
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 1 @71
-                      staticType: int
-              returnType: void
-''');
-  }
-
-  test_parameterTypeNotInferred_topLevelFunction() async {
-    // Strong mode doesn't do type inference on parameters of top level
-    // functions, so it's ok that we don't store inferred type info for them in
-    // summaries.
-    var library = await buildLibrary('''
-void positional([x = 1]) {}
-void named({x: 1}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        positional @5
-          reference: <testLibraryFragment>::@function::positional
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalPositional default x @17
-              type: dynamic
-              constantInitializer
-                IntegerLiteral
-                  literal: 1 @21
-                  staticType: int
-          returnType: void
-        named @33
-          reference: <testLibraryFragment>::@function::named
-          enclosingElement: <testLibraryFragment>
-          parameters
-            optionalNamed default x @40
-              reference: <testLibraryFragment>::@function::named::@parameter::x
-              type: dynamic
-              constantInitializer
-                IntegerLiteral
-                  literal: 1 @43
-                  staticType: int
-          returnType: void
-''');
-  }
-
-  test_propagated_type_refers_to_closure() async {
-    var library = await buildLibrary('''
-void f() {
-  var x = () => 0;
-  var y = x;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: void
-''');
-  }
-
-  test_recordType_class_field() async {
-    var library = await buildLibrary('''
-class A {
-  final (int, String) x;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @32
-              reference: <testLibraryFragment>::@class::A::@field::x
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: (int, String)
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::A::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: (int, String)
-''');
-  }
-
-  test_recordType_class_field_fromLiteral() async {
-    var library = await buildLibrary('''
-class A {
-  final x = (0, true);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            final x @18
-              reference: <testLibraryFragment>::@class::A::@field::x
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: (int, bool)
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get x @-1
-              reference: <testLibraryFragment>::@class::A::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: (int, bool)
-''');
-  }
-
-  test_recordType_class_method_formalParameter() async {
-    var library = await buildLibrary('''
-class A {
-  void foo((int, String) a) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @17
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional a @35
-                  type: (int, String)
-              returnType: void
-''');
-  }
-
-  test_recordType_class_method_returnType() async {
-    var library = await buildLibrary('''
-class A {
-  (int, String) foo() {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          methods
-            foo @26
-              reference: <testLibraryFragment>::@class::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: (int, String)
-''');
-  }
-
-  test_recordType_class_typeParameter_bound() async {
-    var library = await buildLibrary('''
-class A<T extends (int, String)> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: (int, String)
-              defaultType: (int, String)
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_recordType_extension_onType() async {
-    var library = await buildLibrary('''
-extension IntStringExtension on (int, String) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        IntStringExtension @10
-          reference: <testLibraryFragment>::@extension::IntStringExtension
-          enclosingElement: <testLibraryFragment>
-          extendedType: (int, String)
-''');
-  }
-
-  test_recordType_functionType_formalParameter() async {
-    var library = await buildLibrary('''
-void f(void Function((int, String) a) b) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional b @38
-              type: void Function((int, String))
-          returnType: void
-''');
-  }
-
-  test_recordType_functionType_returnType() async {
-    var library = await buildLibrary('''
-void f((int, String) Function() a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @32
-              type: (int, String) Function()
-          returnType: void
-''');
-  }
-
-  test_recordType_topFunction_formalParameter() async {
-    var library = await buildLibrary('''
-void f((int, String) a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @21
-              type: (int, String)
-          returnType: void
-''');
-  }
-
-  test_recordType_topFunction_returnType_empty() async {
-    var library = await buildLibrary('''
-() f() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @3
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: ()
-''');
-  }
-
-  test_recordType_topFunction_returnType_generic() async {
-    var library = await buildLibrary('''
-(int, T) f<T>() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @9
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @11
-              defaultType: dynamic
-          returnType: (int, T)
-''');
-  }
-
-  test_recordType_topFunction_returnType_mixed() async {
-    var library = await buildLibrary('''
-(int, String, {bool c}) f() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @24
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: (int, String, {bool c})
-''');
-  }
-
-  test_recordType_topFunction_returnType_named() async {
-    var library = await buildLibrary('''
-({int a, String b}) f() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @20
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: ({int a, String b})
-''');
-  }
-
-  test_recordType_topFunction_returnType_nested() async {
-    var library = await buildLibrary('''
-((int, String), (bool, double)) f() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @32
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: ((int, String), (bool, double))
-''');
-  }
-
-  test_recordType_topFunction_returnType_nullable() async {
-    var library = await buildLibrary('''
-(int, String)? f() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @15
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: (int, String)?
-''');
-  }
-
-  test_recordType_topFunction_returnType_positional() async {
-    var library = await buildLibrary('''
-(int, String) f() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @14
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: (int, String)
-''');
-  }
-
-  test_recordType_topFunction_returnType_positional_one() async {
-    var library = await buildLibrary('''
-(int,) f() {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @7
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: (int,)
-''');
-  }
-
-  test_recordType_topVariable() async {
-    var library = await buildLibrary('''
-final (int, String) x;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final x @20
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: (int, String)
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: (int, String)
-''');
-  }
-
-  test_recordType_topVariable_fromLiteral() async {
-    var library = await buildLibrary('''
-final x = (0, true);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final x @6
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: (int, bool)
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: (int, bool)
-''');
-  }
-
-  test_recordTypeAnnotation_named() async {
-    var library = await buildLibrary(r'''
-const x = List<({int f1, String f2})>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @6
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            TypeLiteral
-              type: NamedType
-                name: List @10
-                typeArguments: TypeArgumentList
-                  leftBracket: < @14
-                  arguments
-                    RecordTypeAnnotation
-                      leftParenthesis: ( @15
-                      namedFields: RecordTypeAnnotationNamedFields
-                        leftBracket: { @16
-                        fields
-                          RecordTypeAnnotationNamedField
-                            type: NamedType
-                              name: int @17
-                              element: dart:core::<fragment>::@class::int
-                              type: int
-                            name: f1 @21
-                          RecordTypeAnnotationNamedField
-                            type: NamedType
-                              name: String @25
-                              element: dart:core::<fragment>::@class::String
-                              type: String
-                            name: f2 @32
-                        rightBracket: } @34
-                      rightParenthesis: ) @35
-                      type: ({int f1, String f2})
-                  rightBracket: > @36
-                element: dart:core::<fragment>::@class::List
-                type: List<({int f1, String f2})>
-              staticType: Type
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-''');
-  }
-
-  test_recordTypeAnnotation_positional() async {
-    var library = await buildLibrary(r'''
-const x = List<(int, String f2)>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @6
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Type
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            TypeLiteral
-              type: NamedType
-                name: List @10
-                typeArguments: TypeArgumentList
-                  leftBracket: < @14
-                  arguments
-                    RecordTypeAnnotation
-                      leftParenthesis: ( @15
-                      positionalFields
-                        RecordTypeAnnotationPositionalField
-                          type: NamedType
-                            name: int @16
-                            element: dart:core::<fragment>::@class::int
-                            type: int
-                        RecordTypeAnnotationPositionalField
-                          type: NamedType
-                            name: String @21
-                            element: dart:core::<fragment>::@class::String
-                            type: String
-                          name: f2 @28
-                      rightParenthesis: ) @30
-                      type: (int, String)
-                  rightBracket: > @31
-                element: dart:core::<fragment>::@class::List
-                type: List<(int, String)>
-              staticType: Type
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Type
-''');
-  }
-
-  test_setter_documented() async {
-    var library = await buildLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-void set x(value) {}''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        static set x= @69
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * Docs\n */
-          parameters
-            requiredPositional value @71
-              type: dynamic
-          returnType: void
-''');
-  }
-
-  test_setter_external() async {
-    var library = await buildLibrary('external void set x(int value);');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static external set x= @18
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional value @24
-              type: int
-          returnType: void
-''');
-  }
-
-  test_setter_inferred_type_top_level_implicit_return() async {
-    var library = await buildLibrary('set f(int value) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static f @-1
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static set f= @4
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional value @10
-              type: int
-          returnType: void
-''');
-  }
-
-  test_setters() async {
-    var library =
-        await buildLibrary('void set x(int value) {} set y(value) {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-        synthetic static y @-1
-          reference: <testLibraryFragment>::@topLevelVariable::y
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        static set x= @9
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional value @15
-              type: int
-          returnType: void
-        static set y= @29
-          reference: <testLibraryFragment>::@setter::y
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional value @31
-              type: dynamic
-          returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_class_constructor_inherits() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-class A {
-  A.named();
-}
-
-class B {
-  B.named();
-}
-''');
-    configuration
-      ..forSinceSdkVersion()
-      ..withConstructors = true;
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      classes
-        class A @47
-          reference: dart:foo::<fragment>::@class::A
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          constructors
-            named @55
-              reference: dart:foo::<fragment>::@class::A::@constructor::named
-              enclosingElement: dart:foo::<fragment>::@class::A
-              sinceSdkVersion: 2.15.0
-              periodOffset: 54
-              nameEnd: 60
-        class B @73
-          reference: dart:foo::<fragment>::@class::B
-          enclosingElement: dart:foo::<fragment>
-          constructors
-            named @81
-              reference: dart:foo::<fragment>::@class::B::@constructor::named
-              enclosingElement: dart:foo::<fragment>::@class::B
-              periodOffset: 80
-              nameEnd: 86
-''');
-  }
-
-  test_sinceSdkVersion_class_field_inherits() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-class A {
-  int foo = 0;
-}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      classes
-        class A @47
-          reference: dart:foo::<fragment>::@class::A
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          fields
-            foo @57
-              reference: dart:foo::<fragment>::@class::A::@field::foo
-              enclosingElement: dart:foo::<fragment>::@class::A
-              sinceSdkVersion: 2.15.0
-              type: int
-              shouldUseTypeForInitializerInference: true
-          accessors
-            synthetic get foo @-1
-              reference: dart:foo::<fragment>::@class::A::@getter::foo
-              enclosingElement: dart:foo::<fragment>::@class::A
-              sinceSdkVersion: 2.15.0
-              returnType: int
-            synthetic set foo= @-1
-              reference: dart:foo::<fragment>::@class::A::@setter::foo
-              enclosingElement: dart:foo::<fragment>::@class::A
-              sinceSdkVersion: 2.15.0
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_class_getter_inherits() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-class A {
-  int get foo => 0;
-}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      classes
-        class A @47
-          reference: dart:foo::<fragment>::@class::A
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          fields
-            synthetic foo @-1
-              reference: dart:foo::<fragment>::@class::A::@field::foo
-              enclosingElement: dart:foo::<fragment>::@class::A
-              type: int
-          accessors
-            get foo @61
-              reference: dart:foo::<fragment>::@class::A::@getter::foo
-              enclosingElement: dart:foo::<fragment>::@class::A
-              sinceSdkVersion: 2.15.0
-              returnType: int
-''');
-  }
-
-  test_sinceSdkVersion_class_method_inherits() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-class A {
-  void foo() {}
-}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      classes
-        class A @47
-          reference: dart:foo::<fragment>::@class::A
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          methods
-            foo @58
-              reference: dart:foo::<fragment>::@class::A::@method::foo
-              enclosingElement: dart:foo::<fragment>::@class::A
-              sinceSdkVersion: 2.15.0
-              returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_class_method_max_greater() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-class A {
-  @Since('2.16')
-  void foo() {}
-}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      classes
-        class A @47
-          reference: dart:foo::<fragment>::@class::A
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          methods
-            foo @75
-              reference: dart:foo::<fragment>::@class::A::@method::foo
-              enclosingElement: dart:foo::<fragment>::@class::A
-              sinceSdkVersion: 2.16.0
-              returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_class_method_max_less() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-class A {
-  @Since('2.14')
-  void foo() {}
-}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      classes
-        class A @47
-          reference: dart:foo::<fragment>::@class::A
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          methods
-            foo @75
-              reference: dart:foo::<fragment>::@class::A::@method::foo
-              enclosingElement: dart:foo::<fragment>::@class::A
-              sinceSdkVersion: 2.15.0
-              returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_class_setter_inherits() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-class A {
-  set foo(int _) {}
-}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      classes
-        class A @47
-          reference: dart:foo::<fragment>::@class::A
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          fields
-            synthetic foo @-1
-              reference: dart:foo::<fragment>::@class::A::@field::foo
-              enclosingElement: dart:foo::<fragment>::@class::A
-              type: int
-          accessors
-            set foo= @57
-              reference: dart:foo::<fragment>::@class::A::@setter::foo
-              enclosingElement: dart:foo::<fragment>::@class::A
-              sinceSdkVersion: 2.15.0
-              parameters
-                requiredPositional _ @65
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_enum_constant() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-enum E {
-  v1,
-  @Since('2.15')
-  v2
-}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      enums
-        enum E @31
-          reference: dart:foo::<fragment>::@enum::E
-          enclosingElement: dart:foo::<fragment>
-          supertype: Enum
-          fields
-            static const enumConstant v1 @37
-              reference: dart:foo::<fragment>::@enum::E::@field::v1
-              enclosingElement: dart:foo::<fragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-            static const enumConstant v2 @60
-              reference: dart:foo::<fragment>::@enum::E::@field::v2
-              enclosingElement: dart:foo::<fragment>::@enum::E
-              sinceSdkVersion: 2.15.0
-              type: E
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: dart:foo::<fragment>::@enum::E::@field::values
-              enclosingElement: dart:foo::<fragment>::@enum::E
-              type: List<E>
-          accessors
-            synthetic static get v1 @-1
-              reference: dart:foo::<fragment>::@enum::E::@getter::v1
-              enclosingElement: dart:foo::<fragment>::@enum::E
-              returnType: E
-            synthetic static get v2 @-1
-              reference: dart:foo::<fragment>::@enum::E::@getter::v2
-              enclosingElement: dart:foo::<fragment>::@enum::E
-              sinceSdkVersion: 2.15.0
-              returnType: E
-            synthetic static get values @-1
-              reference: dart:foo::<fragment>::@enum::E::@getter::values
-              enclosingElement: dart:foo::<fragment>::@enum::E
-              returnType: List<E>
-''');
-  }
-
-  test_sinceSdkVersion_enum_method_inherits() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-enum E {
-  v;
-  void foo() {}
-}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      enums
-        enum E @46
-          reference: dart:foo::<fragment>::@enum::E
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          supertype: Enum
-          fields
-            static const enumConstant v @52
-              reference: dart:foo::<fragment>::@enum::E::@field::v
-              enclosingElement: dart:foo::<fragment>::@enum::E
-              sinceSdkVersion: 2.15.0
-              type: E
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: dart:foo::<fragment>::@enum::E::@field::values
-              enclosingElement: dart:foo::<fragment>::@enum::E
-              type: List<E>
-          accessors
-            synthetic static get v @-1
-              reference: dart:foo::<fragment>::@enum::E::@getter::v
-              enclosingElement: dart:foo::<fragment>::@enum::E
-              sinceSdkVersion: 2.15.0
-              returnType: E
-            synthetic static get values @-1
-              reference: dart:foo::<fragment>::@enum::E::@getter::values
-              enclosingElement: dart:foo::<fragment>::@enum::E
-              returnType: List<E>
-          methods
-            foo @62
-              reference: dart:foo::<fragment>::@enum::E::@method::foo
-              enclosingElement: dart:foo::<fragment>::@enum::E
-              sinceSdkVersion: 2.15.0
-              returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_extension_method_inherits() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-extension E on int {
-  void foo() {}
-}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      extensions
-        E @51
-          reference: dart:foo::<fragment>::@extension::E
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          extendedType: int
-          methods
-            foo @69
-              reference: dart:foo::<fragment>::@extension::E::@method::foo
-              enclosingElement: dart:foo::<fragment>::@extension::E
-              sinceSdkVersion: 2.15.0
-              returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_mixin_method_inherits() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-mixin M {
-  void foo() {}
-}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      mixins
-        mixin M @47
-          reference: dart:foo::<fragment>::@mixin::M
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          superclassConstraints
-            Object
-          methods
-            foo @58
-              reference: dart:foo::<fragment>::@mixin::M::@method::foo
-              enclosingElement: dart:foo::<fragment>::@mixin::M
-              sinceSdkVersion: 2.15.0
-              returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_unit_function() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-void foo() {}
-
-void bar() {}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      functions
-        foo @46
-          reference: dart:foo::<fragment>::@function::foo
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          returnType: void
-        bar @61
-          reference: dart:foo::<fragment>::@function::bar
-          enclosingElement: dart:foo::<fragment>
-          returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_unit_function_format_extended() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15.3-dev.7')
-void foo() {}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      functions
-        foo @54
-          reference: dart:foo::<fragment>::@function::foo
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.3-dev.7
-          returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_unit_function_format_full() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15.3')
-void foo() {}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      functions
-        foo @48
-          reference: dart:foo::<fragment>::@function::foo
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.3
-          returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_unit_function_format_invalid() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('42')
-void foo() {}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      functions
-        foo @44
-          reference: dart:foo::<fragment>::@function::foo
-          enclosingElement: dart:foo::<fragment>
-          returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_unit_function_inherits() async {
-    var library = await _buildDartFooLibrary(r'''
-@Since('2.15')
-library;
-
-import 'dart:_internal';
-
-void foo() {}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  sinceSdkVersion: 2.15.0
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      functions
-        foo @56
-          reference: dart:foo::<fragment>::@function::foo
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_unit_function_parameters_optionalNamed() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-void f(int p1, {
-  @Since('2.15')
-  int? p2,
-}) {}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      functions
-        f @31
-          reference: dart:foo::<fragment>::@function::f
-          enclosingElement: dart:foo::<fragment>
-          parameters
-            requiredPositional p1 @37
-              type: int
-            optionalNamed default p2 @67
-              reference: dart:foo::<fragment>::@function::f::@parameter::p2
-              type: int?
-              sinceSdkVersion: 2.15.0
-          returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_unit_function_parameters_optionalPositional() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-void f(int p1, [
-  @Since('2.15')
-  int? p2,
-]) {}
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      functions
-        f @31
-          reference: dart:foo::<fragment>::@function::f
-          enclosingElement: dart:foo::<fragment>
-          parameters
-            requiredPositional p1 @37
-              type: int
-            optionalPositional default p2 @67
-              type: int?
-              sinceSdkVersion: 2.15.0
-          returnType: void
-''');
-  }
-
-  test_sinceSdkVersion_unit_typeAlias() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-typedef A = List<int>;
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      typeAliases
-        A @49
-          reference: dart:foo::<fragment>::@typeAlias::A
-          sinceSdkVersion: 2.15.0
-          aliasedType: List<int>
-''');
-  }
-
-  test_sinceSdkVersion_unit_variable() async {
-    var library = await _buildDartFooLibrary(r'''
-import 'dart:_internal';
-
-@Since('2.15')
-final foo = 0;
-''');
-    configuration.forSinceSdkVersion();
-    checkElementText(library, r'''
-library
-  reference: dart:foo
-  definingUnit: dart:foo::<fragment>
-  units
-    dart:foo::<fragment>
-      enclosingElement: dart:foo
-      topLevelVariables
-        static final foo @47
-          reference: dart:foo::<fragment>::@topLevelVariable::foo
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get foo @-1
-          reference: dart:foo::<fragment>::@getter::foo
-          enclosingElement: dart:foo::<fragment>
-          sinceSdkVersion: 2.15.0
-          returnType: int
-''');
-  }
-
-  test_syntheticFunctionType_genericClosure() async {
-    var library = await buildLibrary('''
-final v = f() ? <T>(T t) => 0 : <T>(T t) => 1;
-bool f() => true;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int Function<T>(T)
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function<T>(T)
-      functions
-        f @52
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-''');
-  }
-
-  test_syntheticFunctionType_genericClosure_inGenericFunction() async {
-    var library = await buildLibrary('''
-void f<T, U>(bool b) {
-  final v = b ? <V>(T t, U u, V v) => 0 : <V>(T t, U u, V v) => 1;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-            covariant U @10
-              defaultType: dynamic
-          parameters
-            requiredPositional b @18
-              type: bool
-          returnType: void
-''');
-  }
-
-  test_syntheticFunctionType_inGenericClass() async {
-    var library = await buildLibrary('''
-class C<T, U> {
-  var v = f() ? (T t, U u) => 0 : (T t, U u) => 1;
-}
-bool f() => false;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          fields
-            v @22
-              reference: <testLibraryFragment>::@class::C::@field::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: int Function(T, U)
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get v @-1
-              reference: <testLibraryFragment>::@class::C::@getter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: int Function(T, U)
-            synthetic set v= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::v
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _v @-1
-                  type: int Function(T, U)
-              returnType: void
-      functions
-        f @74
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-''');
-  }
-
-  test_syntheticFunctionType_inGenericFunction() async {
-    var library = await buildLibrary('''
-void f<T, U>(bool b) {
-  var v = b ? (T t, U u) => 0 : (T t, U u) => 1;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @5
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @7
-              defaultType: dynamic
-            covariant U @10
-              defaultType: dynamic
-          parameters
-            requiredPositional b @18
-              type: bool
-          returnType: void
-''');
-  }
-
-  test_syntheticFunctionType_noArguments() async {
-    var library = await buildLibrary('''
-final v = f() ? () => 0 : () => 1;
-bool f() => true;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int Function()
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function()
-      functions
-        f @40
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-''');
-  }
-
-  test_syntheticFunctionType_withArguments() async {
-    var library = await buildLibrary('''
-final v = f() ? (int x, String y) => 0 : (int x, String y) => 1;
-bool f() => true;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int Function(int, String)
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function(int, String)
-      functions
-        f @70
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: bool
-''');
-  }
-
-  test_top_level_variable_external() async {
-    var library = await buildLibrary('''
-external int i;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static i @13
-          reference: <testLibraryFragment>::@topLevelVariable::i
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        synthetic static get i @-1
-          reference: <testLibraryFragment>::@getter::i
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set i= @-1
-          reference: <testLibraryFragment>::@setter::i
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _i @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_type_arguments_explicit_dynamic_dynamic() async {
-    var library = await buildLibrary('Map<dynamic, dynamic> m;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static m @22
-          reference: <testLibraryFragment>::@topLevelVariable::m
-          enclosingElement: <testLibraryFragment>
-          type: Map<dynamic, dynamic>
-      accessors
-        synthetic static get m @-1
-          reference: <testLibraryFragment>::@getter::m
-          enclosingElement: <testLibraryFragment>
-          returnType: Map<dynamic, dynamic>
-        synthetic static set m= @-1
-          reference: <testLibraryFragment>::@setter::m
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _m @-1
-              type: Map<dynamic, dynamic>
-          returnType: void
-''');
-  }
-
-  test_type_arguments_explicit_dynamic_int() async {
-    var library = await buildLibrary('Map<dynamic, int> m;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static m @18
-          reference: <testLibraryFragment>::@topLevelVariable::m
-          enclosingElement: <testLibraryFragment>
-          type: Map<dynamic, int>
-      accessors
-        synthetic static get m @-1
-          reference: <testLibraryFragment>::@getter::m
-          enclosingElement: <testLibraryFragment>
-          returnType: Map<dynamic, int>
-        synthetic static set m= @-1
-          reference: <testLibraryFragment>::@setter::m
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _m @-1
-              type: Map<dynamic, int>
-          returnType: void
-''');
-  }
-
-  test_type_arguments_explicit_String_dynamic() async {
-    var library = await buildLibrary('Map<String, dynamic> m;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static m @21
-          reference: <testLibraryFragment>::@topLevelVariable::m
-          enclosingElement: <testLibraryFragment>
-          type: Map<String, dynamic>
-      accessors
-        synthetic static get m @-1
-          reference: <testLibraryFragment>::@getter::m
-          enclosingElement: <testLibraryFragment>
-          returnType: Map<String, dynamic>
-        synthetic static set m= @-1
-          reference: <testLibraryFragment>::@setter::m
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _m @-1
-              type: Map<String, dynamic>
-          returnType: void
-''');
-  }
-
-  test_type_arguments_explicit_String_int() async {
-    var library = await buildLibrary('Map<String, int> m;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static m @17
-          reference: <testLibraryFragment>::@topLevelVariable::m
-          enclosingElement: <testLibraryFragment>
-          type: Map<String, int>
-      accessors
-        synthetic static get m @-1
-          reference: <testLibraryFragment>::@getter::m
-          enclosingElement: <testLibraryFragment>
-          returnType: Map<String, int>
-        synthetic static set m= @-1
-          reference: <testLibraryFragment>::@setter::m
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _m @-1
-              type: Map<String, int>
-          returnType: void
-''');
-  }
-
-  test_type_arguments_implicit() async {
-    var library = await buildLibrary('Map m;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static m @4
-          reference: <testLibraryFragment>::@topLevelVariable::m
-          enclosingElement: <testLibraryFragment>
-          type: Map<dynamic, dynamic>
-      accessors
-        synthetic static get m @-1
-          reference: <testLibraryFragment>::@getter::m
-          enclosingElement: <testLibraryFragment>
-          returnType: Map<dynamic, dynamic>
-        synthetic static set m= @-1
-          reference: <testLibraryFragment>::@setter::m
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _m @-1
-              type: Map<dynamic, dynamic>
-          returnType: void
-''');
-  }
-
-  test_type_dynamic() async {
-    var library = await buildLibrary('dynamic d;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static d @8
-          reference: <testLibraryFragment>::@topLevelVariable::d
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        synthetic static get d @-1
-          reference: <testLibraryFragment>::@getter::d
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set d= @-1
-          reference: <testLibraryFragment>::@setter::d
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _d @-1
-              type: dynamic
-          returnType: void
-''');
-  }
-
-  test_type_inference_assignmentExpression_references_onTopLevelVariable() async {
-    var library = await buildLibrary('''
-var a = () {
-  b += 0;
-  return 0;
-};
-var b = 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static a @4
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: int Function()
-          shouldUseTypeForInitializerInference: false
-        static b @42
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function()
-        synthetic static set a= @-1
-          reference: <testLibraryFragment>::@setter::a
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _a @-1
-              type: int Function()
-          returnType: void
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set b= @-1
-          reference: <testLibraryFragment>::@setter::b
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _b @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_type_inference_based_on_loadLibrary() async {
-    addSource('$testPackageLibPath/a.dart', '');
-    var library = await buildLibrary('''
-import 'a.dart' deferred as a;
-var x = a.loadLibrary;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart deferred as a @28
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    a @28
-      reference: <testLibraryFragment>::@prefix::a
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart deferred as a @28
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        a @28
-          reference: <testLibraryFragment>::@prefix::a
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static x @35
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: Future<dynamic> Function()
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: Future<dynamic> Function()
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: Future<dynamic> Function()
-          returnType: void
-''');
-  }
-
-  test_type_inference_closure_with_function_typed_parameter() async {
-    var library = await buildLibrary('''
-var x = (int f(String x)) => 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static x @4
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int Function(int Function(String))
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function(int Function(String))
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int Function(int Function(String))
-          returnType: void
-''');
-  }
-
-  test_type_inference_closure_with_function_typed_parameter_new() async {
-    var library = await buildLibrary('''
-var x = (int Function(String) f) => 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static x @4
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int Function(int Function(String))
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function(int Function(String))
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int Function(int Function(String))
-          returnType: void
-''');
-  }
-
-  test_type_inference_depends_on_exported_variable() async {
-    addSource('$testPackageLibPath/a.dart', 'export "b.dart";');
-    addSource('$testPackageLibPath/b.dart', 'var x = 0;');
-    var library = await buildLibrary('''
-import 'a.dart';
-var y = x;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static y @21
-          reference: <testLibraryFragment>::@topLevelVariable::y
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get y @-1
-          reference: <testLibraryFragment>::@getter::y
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set y= @-1
-          reference: <testLibraryFragment>::@setter::y
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _y @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_type_inference_field_cycle() async {
-    var library = await buildLibrary('''
-class A {
-  static final x = y + 1;
-  static final y = x + 1;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            static final x @25
-              reference: <testLibraryFragment>::@class::A::@field::x
-              enclosingElement: <testLibraryFragment>::@class::A
-              typeInferenceError: dependencyCycle
-                arguments: [x, y]
-              type: dynamic
-              shouldUseTypeForInitializerInference: false
-            static final y @51
-              reference: <testLibraryFragment>::@class::A::@field::y
-              enclosingElement: <testLibraryFragment>::@class::A
-              typeInferenceError: dependencyCycle
-                arguments: [x, y]
-              type: dynamic
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic static get x @-1
-              reference: <testLibraryFragment>::@class::A::@getter::x
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: dynamic
-            synthetic static get y @-1
-              reference: <testLibraryFragment>::@class::A::@getter::y
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: dynamic
-''');
-  }
-
-  test_type_inference_field_cycle_chain() async {
-    var library = await buildLibrary('''
-class A {
-  static final a = b.c;
-  static final b = A();
-  final c = a;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            static final a @25
-              reference: <testLibraryFragment>::@class::A::@field::a
-              enclosingElement: <testLibraryFragment>::@class::A
-              typeInferenceError: dependencyCycle
-                arguments: [a, c]
-              type: dynamic
-              shouldUseTypeForInitializerInference: false
-            static final b @49
-              reference: <testLibraryFragment>::@class::A::@field::b
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            final c @66
-              reference: <testLibraryFragment>::@class::A::@field::c
-              enclosingElement: <testLibraryFragment>::@class::A
-              typeInferenceError: dependencyCycle
-                arguments: [a, c]
-              type: dynamic
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic static get a @-1
-              reference: <testLibraryFragment>::@class::A::@getter::a
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: dynamic
-            synthetic static get b @-1
-              reference: <testLibraryFragment>::@class::A::@getter::b
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: A
-            synthetic get c @-1
-              reference: <testLibraryFragment>::@class::A::@getter::c
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: dynamic
-''');
-  }
-
-  test_type_inference_field_depends_onFieldFormal() async {
-    var library = await buildLibrary('''
-class A<T> {
-  T value;
-
-  A(this.value);
-}
-
-class B {
-  var a = new A('');
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          fields
-            value @17
-              reference: <testLibraryFragment>::@class::A::@field::value
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: T
-          constructors
-            @27
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional final this.value @34
-                  type: T
-                  field: <testLibraryFragment>::@class::A::@field::value
-          accessors
-            synthetic get value @-1
-              reference: <testLibraryFragment>::@class::A::@getter::value
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: T
-            synthetic set value= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::value
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _value @-1
-                  type: T
-              returnType: void
-        class B @51
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          fields
-            a @61
-              reference: <testLibraryFragment>::@class::B::@field::a
-              enclosingElement: <testLibraryFragment>::@class::B
-              type: A<String>
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-          accessors
-            synthetic get a @-1
-              reference: <testLibraryFragment>::@class::B::@getter::a
-              enclosingElement: <testLibraryFragment>::@class::B
-              returnType: A<String>
-            synthetic set a= @-1
-              reference: <testLibraryFragment>::@class::B::@setter::a
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional _a @-1
-                  type: A<String>
-              returnType: void
-''');
-  }
-
-  test_type_inference_field_depends_onFieldFormal_withMixinApp() async {
-    var library = await buildLibrary('''
-class A<T> {
-  T value;
-
-  A(this.value);
-}
-
-class B<T> = A<T> with M;
-
-class C {
-  var a = new B(42);
-}
-
-mixin M {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          fields
-            value @17
-              reference: <testLibraryFragment>::@class::A::@field::value
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: T
-          constructors
-            @27
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional final this.value @34
-                  type: T
-                  field: <testLibraryFragment>::@class::A::@field::value
-          accessors
-            synthetic get value @-1
-              reference: <testLibraryFragment>::@class::A::@getter::value
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: T
-            synthetic set value= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::value
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _value @-1
-                  type: T
-              returnType: void
-        class alias B @51
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @53
-              defaultType: dynamic
-          supertype: A<T>
-          mixins
-            M
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              parameters
-                requiredPositional final value @-1
-                  type: T
-              constantInitializers
-                SuperConstructorInvocation
-                  superKeyword: super @0
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      SimpleIdentifier
-                        token: value @-1
-                        staticElement: <testLibraryFragment>::@class::B::@constructor::new::@parameter::value
-                        staticType: T
-                    rightParenthesis: ) @0
-                  staticElement: <testLibraryFragment>::@class::A::@constructor::new
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: T}
-        class C @78
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          fields
-            a @88
-              reference: <testLibraryFragment>::@class::C::@field::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: B<int>
-              shouldUseTypeForInitializerInference: false
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get a @-1
-              reference: <testLibraryFragment>::@class::C::@getter::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: B<int>
-            synthetic set a= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::a
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _a @-1
-                  type: B<int>
-              returnType: void
-      mixins
-        mixin M @112
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_type_inference_fieldFormal_depends_onField() async {
-    var library = await buildLibrary('''
-class A<T> {
-  var f = 0;
-  A(this.f);
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          fields
-            f @19
-              reference: <testLibraryFragment>::@class::A::@field::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int
-              shouldUseTypeForInitializerInference: false
-          constructors
-            @28
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional final this.f @35
-                  type: int
-                  field: <testLibraryFragment>::@class::A::@field::f
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::A::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int
-            synthetic set f= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _f @-1
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_type_inference_instanceCreation_notGeneric() async {
-    var library = await buildLibrary('''
-class A {
-  A(_);
-}
-final a = A(() => b);
-final b = A(() => a);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            @12
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @14
-                  type: dynamic
-      topLevelVariables
-        static final a @26
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [a, b]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static final b @48
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [a, b]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_type_inference_multiplyDefinedElement() async {
-    addSource('$testPackageLibPath/a.dart', 'class C {}');
-    addSource('$testPackageLibPath/b.dart', 'class C {}');
-    var library = await buildLibrary('''
-import 'a.dart';
-import 'b.dart';
-var v = C;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static v @38
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: InvalidType
-          returnType: void
-''');
-  }
-
-  test_type_inference_nested_function() async {
-    var library = await buildLibrary('''
-var x = (t) => (u) => t + u;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static x @4
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function(dynamic) Function(dynamic)
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function(dynamic) Function(dynamic)
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: dynamic Function(dynamic) Function(dynamic)
-          returnType: void
-''');
-  }
-
-  test_type_inference_nested_function_with_parameter_types() async {
-    var library = await buildLibrary('''
-var x = (int t) => (int u) => t + u;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static x @4
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int Function(int) Function(int)
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int Function(int) Function(int)
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int Function(int) Function(int)
-          returnType: void
-''');
-  }
-
-  test_type_inference_of_closure_with_default_value() async {
-    var library = await buildLibrary('''
-var x = ([y: 0]) => y;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static x @4
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function([dynamic])
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function([dynamic])
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: dynamic Function([dynamic])
-          returnType: void
-''');
-  }
-
-  test_type_inference_topVariable_cycle_afterChain() async {
-    // Note that `a` depends on `b`, but does not belong to the cycle.
-    var library = await buildLibrary('''
-final a = b;
-final b = c;
-final c = b;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static final b @19
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [b, c]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static final c @32
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [b, c]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_type_inference_topVariable_cycle_beforeChain() async {
-    // Note that `c` depends on `b`, but does not belong to the cycle.
-    var library = await buildLibrary('''
-final a = b;
-final b = a;
-final c = b;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [a, b]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static final b @19
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [a, b]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static final c @32
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_type_inference_topVariable_cycle_inCycle() async {
-    // `b` and `c` form a cycle.
-    // `a` and `d` form a different cycle, even though `a` references `b`.
-    var library = await buildLibrary('''
-final a = b + d;
-final b = c;
-final c = b;
-final d = a;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [a, d]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static final b @23
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [b, c]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static final c @36
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [b, c]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static final d @49
-          reference: <testLibraryFragment>::@topLevelVariable::d
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [a, d]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get d @-1
-          reference: <testLibraryFragment>::@getter::d
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_type_inference_topVariable_cycle_sharedElement() async {
-    // 1. Push `a`, start resolving.
-    // 2. Go to `b`, push, start resolving.
-    // 3. Go to `c`, push, start resolving.
-    // 4. Go to `b`, detect cycle `[b, c]`, set `dynamic`, return.
-    // 5. Pop `c`, already inferred (to `dynamic`), return.
-    // 6. Continue resolving `b` (it is not done, and not popped yet).
-    // 7. Go to `a`, detect cycle `[a, b]`, set `dynamic`, return.
-    var library = await buildLibrary('''
-final a = b;
-final b = c + a;
-final c = b;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final a @6
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [a, b]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static final b @19
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [b, c]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-        static final c @36
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          typeInferenceError: dependencyCycle
-            arguments: [b, c]
-          type: dynamic
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_type_inference_topVariable_depends_onFieldFormal() async {
-    var library = await buildLibrary('''
-class A {}
-
-class B extends A {}
-
-class C<T extends A> {
-  final T f;
-  const C(this.f);
-}
-
-final b = B();
-final c = C(b);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @18
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: <testLibraryFragment>::@class::A::@constructor::new
-        class C @40
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @42
-              bound: A
-              defaultType: A
-          fields
-            final f @67
-              reference: <testLibraryFragment>::@class::C::@field::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: T
-          constructors
-            const @78
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional final this.f @85
-                  type: T
-                  field: <testLibraryFragment>::@class::C::@field::f
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::C::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: T
-      topLevelVariables
-        static final b @98
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: B
-          shouldUseTypeForInitializerInference: false
-        static final c @113
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C<B>
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: B
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C<B>
-''');
-  }
-
-  test_type_inference_using_extension_getter() async {
-    var library = await buildLibrary('''
-extension on String {
-  int get foo => 0;
-}
-var v = 'a'.foo;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        <null> @-1
-          reference: <testLibraryFragment>::@extension::0
-          enclosingElement: <testLibraryFragment>
-          extendedType: String
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@extension::0::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::0
-              type: int
-          accessors
-            get foo @32
-              reference: <testLibraryFragment>::@extension::0::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::0
-              returnType: int
-      topLevelVariables
-        static v @48
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_type_invalid_topLevelVariableElement_asType() async {
-    var library = await buildLibrary('''
-class C<T extends V> {}
-typedef V F(V p);
-V f(V p) {}
-V V2 = null;
-int V = 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              bound: dynamic
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        functionTypeAliasBased F @34
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function(dynamic)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional p @38
-                type: dynamic
-            returnType: dynamic
-      topLevelVariables
-        static V2 @56
-          reference: <testLibraryFragment>::@topLevelVariable::V2
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-          shouldUseTypeForInitializerInference: true
-        static V @71
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get V2 @-1
-          reference: <testLibraryFragment>::@getter::V2
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set V2= @-1
-          reference: <testLibraryFragment>::@setter::V2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _V2 @-1
-              type: dynamic
-          returnType: void
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set V= @-1
-          reference: <testLibraryFragment>::@setter::V
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _V @-1
-              type: int
-          returnType: void
-      functions
-        f @44
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional p @48
-              type: dynamic
-          returnType: dynamic
-''');
-  }
-
-  test_type_invalid_topLevelVariableElement_asTypeArgument() async {
-    var library = await buildLibrary('''
-var V;
-static List<V> V2;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static V @4
-          reference: <testLibraryFragment>::@topLevelVariable::V
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-        static V2 @22
-          reference: <testLibraryFragment>::@topLevelVariable::V2
-          enclosingElement: <testLibraryFragment>
-          type: List<dynamic>
-      accessors
-        synthetic static get V @-1
-          reference: <testLibraryFragment>::@getter::V
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set V= @-1
-          reference: <testLibraryFragment>::@setter::V
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _V @-1
-              type: dynamic
-          returnType: void
-        synthetic static get V2 @-1
-          reference: <testLibraryFragment>::@getter::V2
-          enclosingElement: <testLibraryFragment>
-          returnType: List<dynamic>
-        synthetic static set V2= @-1
-          reference: <testLibraryFragment>::@setter::V2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _V2 @-1
-              type: List<dynamic>
-          returnType: void
-''');
-  }
-
-  test_type_invalid_typeParameter_asPrefix() async {
-    var library = await buildLibrary('''
-class C<T> {
-  m(T.K p) {}
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            m @15
-              reference: <testLibraryFragment>::@class::C::@method::m
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional p @21
-                  type: InvalidType
-              returnType: dynamic
-''');
-  }
-
-  test_type_invalid_unresolvedPrefix() async {
-    var library = await buildLibrary('''
-p.C v;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static v @4
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: InvalidType
-          returnType: void
-''');
-  }
-
-  test_type_never() async {
-    var library = await buildLibrary('Never d;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static d @6
-          reference: <testLibraryFragment>::@topLevelVariable::d
-          enclosingElement: <testLibraryFragment>
-          type: Never
-      accessors
-        synthetic static get d @-1
-          reference: <testLibraryFragment>::@getter::d
-          enclosingElement: <testLibraryFragment>
-          returnType: Never
-        synthetic static set d= @-1
-          reference: <testLibraryFragment>::@setter::d
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _d @-1
-              type: Never
-          returnType: void
-''');
-  }
-
-  test_type_param_ref_nullability_none() async {
-    var library = await buildLibrary('''
-class C<T> {
-  T t;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          fields
-            t @17
-              reference: <testLibraryFragment>::@class::C::@field::t
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: T
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get t @-1
-              reference: <testLibraryFragment>::@class::C::@getter::t
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: T
-            synthetic set t= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::t
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _t @-1
-                  type: T
-              returnType: void
-''');
-  }
-
-  test_type_param_ref_nullability_question() async {
-    var library = await buildLibrary('''
-class C<T> {
-  T? t;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          fields
-            t @18
-              reference: <testLibraryFragment>::@class::C::@field::t
-              enclosingElement: <testLibraryFragment>::@class::C
-              type: T?
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          accessors
-            synthetic get t @-1
-              reference: <testLibraryFragment>::@class::C::@getter::t
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: T?
-            synthetic set t= @-1
-              reference: <testLibraryFragment>::@class::C::@setter::t
-              enclosingElement: <testLibraryFragment>::@class::C
-              parameters
-                requiredPositional _t @-1
-                  type: T?
-              returnType: void
-''');
-  }
-
-  test_type_reference_lib_to_lib() async {
-    var library = await buildLibrary('''
-class C {}
-enum E { v }
-typedef F();
-C c;
-E e;
-F f;''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      enums
-        enum E @16
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @20
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      typeAliases
-        functionTypeAliasBased F @32
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-      topLevelVariables
-        static c @39
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-        static e @44
-          reference: <testLibraryFragment>::@topLevelVariable::e
-          enclosingElement: <testLibraryFragment>
-          type: E
-        static f @49
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-            alias: <testLibraryFragment>::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibraryFragment>::@getter::e
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibraryFragment>::@setter::e
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-            alias: <testLibraryFragment>::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: <testLibraryFragment>::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_lib_to_part() async {
-    addSource('$testPackageLibPath/a.dart',
-        'part of l; class C {} enum E { v } typedef F();');
-    var library =
-        await buildLibrary('library l; part "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  name: l
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-      topLevelVariables
-        static c @28
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-        static e @33
-          reference: <testLibraryFragment>::@topLevelVariable::e
-          enclosingElement: <testLibraryFragment>
-          type: E
-        static f @38
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibraryFragment>::@getter::e
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibraryFragment>::@setter::e
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-          returnType: void
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class C @17
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::C
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::C::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::C
-      enums
-        enum E @27
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          supertype: Enum
-          fields
-            static const enumConstant v @31
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::v
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-                      type: E
-                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              returnType: List<E>
-      typeAliases
-        functionTypeAliasBased F @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-''');
-  }
-
-  test_type_reference_part_to_lib() async {
-    addSource('$testPackageLibPath/a.dart', 'part of l; C c; E e; F f;');
-    var library = await buildLibrary(
-        'library l; part "a.dart"; class C {} enum E { v } typedef F();');
-    checkElementText(library, r'''
-library
-  name: l
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        class C @32
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      enums
-        enum E @42
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @46
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      typeAliases
-        functionTypeAliasBased F @58
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @13
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::c
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: C
-        static e @18
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::e
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: E
-        static f @23
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::f
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: dynamic Function()
-            alias: <testLibraryFragment>::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::c
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::c
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::e
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::e
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::f
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: dynamic Function()
-            alias: <testLibraryFragment>::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::f
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: <testLibraryFragment>::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_part_to_other_part() async {
-    addSource('$testPackageLibPath/a.dart',
-        'part of l; class C {} enum E { v } typedef F();');
-    addSource('$testPackageLibPath/b.dart', 'part of l; C c; E e; F f;');
-    var library =
-        await buildLibrary('library l; part "a.dart"; part "b.dart";');
-    checkElementText(library, r'''
-library
-  name: l
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-    part_1
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-        part_1
-          uri: package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/b.dart
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class C @17
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::C
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::C::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::C
-      enums
-        enum E @27
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          supertype: Enum
-          fields
-            static const enumConstant v @31
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::v
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-                      type: E
-                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              returnType: List<E>
-      typeAliases
-        functionTypeAliasBased F @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @13
-          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::c
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          type: C
-        static e @18
-          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::e
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          type: E
-        static f @23
-          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::f
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          type: dynamic Function()
-            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::c
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@setter::c
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::e
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@setter::e
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::f
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: dynamic Function()
-            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@setter::f
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_part_to_part() async {
-    addSource('$testPackageLibPath/a.dart',
-        'part of l; class C {} enum E { v } typedef F(); C c; E e; F f;');
-    var library = await buildLibrary('library l; part "a.dart";');
-    checkElementText(library, r'''
-library
-  name: l
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class C @17
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::C
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::C::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::C
-      enums
-        enum E @27
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          supertype: Enum
-          fields
-            static const enumConstant v @31
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::v
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-                      type: E
-                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@field::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::v
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::E::@getter::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::E
-              returnType: List<E>
-      typeAliases
-        functionTypeAliasBased F @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-      topLevelVariables
-        static c @50
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::c
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: C
-        static e @55
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::e
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: E
-        static f @60
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::f
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: dynamic Function()
-            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::c
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::c
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::e
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::e
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::f
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: dynamic Function()
-            alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::f
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: <testLibrary>::@fragment::package:test/a.dart::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_class() async {
-    var library = await buildLibrary('class C {} C c;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static c @13
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_class_with_type_arguments() async {
-    var library = await buildLibrary('class C<T, U> {} C<int, String> c;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static c @32
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C<int, String>
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C<int, String>
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C<int, String>
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_class_with_type_arguments_implicit() async {
-    var library = await buildLibrary('class C<T, U> {} C c;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-            covariant U @11
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      topLevelVariables
-        static c @19
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C<dynamic, dynamic>
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C<dynamic, dynamic>
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C<dynamic, dynamic>
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_enum() async {
-    var library = await buildLibrary('enum E { v } E e;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum E @5
-          reference: <testLibraryFragment>::@enum::E
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @9
-              reference: <testLibraryFragment>::@enum::E::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: E
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: E @-1
-                      element: <testLibraryFragment>::@enum::E
-                      type: E
-                    staticElement: <testLibraryFragment>::@enum::E::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: E
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::E::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              type: List<E>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::E::@getter::v
-                      staticType: E
-                  rightBracket: ] @0
-                  staticType: List<E>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::E::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::E
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: E
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::E::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::E
-              returnType: List<E>
-      topLevelVariables
-        static e @15
-          reference: <testLibraryFragment>::@topLevelVariable::e
-          enclosingElement: <testLibraryFragment>
-          type: E
-      accessors
-        synthetic static get e @-1
-          reference: <testLibraryFragment>::@getter::e
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibraryFragment>::@setter::e
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_import() async {
-    addSource(
-        '$testPackageLibPath/a.dart', 'class C {} enum E { v } typedef F();');
-    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @19
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-        static e @24
-          reference: <testLibraryFragment>::@topLevelVariable::e
-          enclosingElement: <testLibraryFragment>
-          type: E
-        static f @29
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-            alias: package:test/a.dart::<fragment>::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibraryFragment>::@getter::e
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibraryFragment>::@setter::e
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-            alias: package:test/a.dart::<fragment>::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: package:test/a.dart::<fragment>::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_import_export() async {
-    addSource('$testPackageLibPath/a.dart', 'export "b.dart";');
-    addSource(
-        '$testPackageLibPath/b.dart', 'class C {} enum E { v } typedef F();');
-    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @19
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-        static e @24
-          reference: <testLibraryFragment>::@topLevelVariable::e
-          enclosingElement: <testLibraryFragment>
-          type: E
-        static f @29
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-            alias: package:test/b.dart::<fragment>::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibraryFragment>::@getter::e
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibraryFragment>::@setter::e
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-            alias: package:test/b.dart::<fragment>::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: package:test/b.dart::<fragment>::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_import_export_export() async {
-    addSource('$testPackageLibPath/a.dart', 'export "b.dart";');
-    addSource('$testPackageLibPath/b.dart', 'export "c.dart";');
-    addSource(
-        '$testPackageLibPath/c.dart', 'class C {} enum E { v } typedef F();');
-    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @19
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-        static e @24
-          reference: <testLibraryFragment>::@topLevelVariable::e
-          enclosingElement: <testLibraryFragment>
-          type: E
-        static f @29
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-            alias: package:test/c.dart::<fragment>::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibraryFragment>::@getter::e
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibraryFragment>::@setter::e
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-            alias: package:test/c.dart::<fragment>::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: package:test/c.dart::<fragment>::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_import_export_export_in_subdirs() async {
-    addSource('$testPackageLibPath/a/a.dart', 'export "b/b.dart";');
-    addSource('$testPackageLibPath/a/b/b.dart', 'export "../c/c.dart";');
-    addSource('$testPackageLibPath/a/c/c.dart',
-        'class C {} enum E { v } typedef F();');
-    var library = await buildLibrary('import "a/a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @21
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-        static e @26
-          reference: <testLibraryFragment>::@topLevelVariable::e
-          enclosingElement: <testLibraryFragment>
-          type: E
-        static f @31
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-            alias: package:test/a/c/c.dart::<fragment>::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibraryFragment>::@getter::e
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibraryFragment>::@setter::e
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-            alias: package:test/a/c/c.dart::<fragment>::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: package:test/a/c/c.dart::<fragment>::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_import_export_in_subdirs() async {
-    addSource('$testPackageLibPath/a/a.dart', 'export "b/b.dart";');
-    addSource('$testPackageLibPath/a/b/b.dart',
-        'class C {} enum E { v } typedef F();');
-    var library = await buildLibrary('import "a/a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @21
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-        static e @26
-          reference: <testLibraryFragment>::@topLevelVariable::e
-          enclosingElement: <testLibraryFragment>
-          type: E
-        static f @31
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-            alias: package:test/a/b/b.dart::<fragment>::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibraryFragment>::@getter::e
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibraryFragment>::@setter::e
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-            alias: package:test/a/b/b.dart::<fragment>::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: package:test/a/b/b.dart::<fragment>::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_import_part() async {
-    addSource('$testPackageLibPath/a.dart', 'library l; part "b.dart";');
-    addSource('$testPackageLibPath/b.dart',
-        'part of l; class C {} enum E { v } typedef F();');
-    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @19
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-        static e @24
-          reference: <testLibraryFragment>::@topLevelVariable::e
-          enclosingElement: <testLibraryFragment>
-          type: E
-        static f @29
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-            alias: package:test/a.dart::@fragment::package:test/b.dart::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibraryFragment>::@getter::e
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibraryFragment>::@setter::e
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-            alias: package:test/a.dart::@fragment::package:test/b.dart::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: package:test/a.dart::@fragment::package:test/b.dart::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_import_part2() async {
-    addSource('$testPackageLibPath/a.dart',
-        'library l; part "p1.dart"; part "p2.dart";');
-    addSource('$testPackageLibPath/p1.dart', 'part of l; class C1 {}');
-    addSource('$testPackageLibPath/p2.dart', 'part of l; class C2 {}');
-    var library = await buildLibrary('import "a.dart"; C1 c1; C2 c2;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c1 @20
-          reference: <testLibraryFragment>::@topLevelVariable::c1
-          enclosingElement: <testLibraryFragment>
-          type: C1
-        static c2 @27
-          reference: <testLibraryFragment>::@topLevelVariable::c2
-          enclosingElement: <testLibraryFragment>
-          type: C2
-      accessors
-        synthetic static get c1 @-1
-          reference: <testLibraryFragment>::@getter::c1
-          enclosingElement: <testLibraryFragment>
-          returnType: C1
-        synthetic static set c1= @-1
-          reference: <testLibraryFragment>::@setter::c1
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c1 @-1
-              type: C1
-          returnType: void
-        synthetic static get c2 @-1
-          reference: <testLibraryFragment>::@getter::c2
-          enclosingElement: <testLibraryFragment>
-          returnType: C2
-        synthetic static set c2= @-1
-          reference: <testLibraryFragment>::@setter::c2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c2 @-1
-              type: C2
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_import_part_in_subdir() async {
-    addSource('$testPackageLibPath/a/b.dart', 'library l; part "c.dart";');
-    addSource('$testPackageLibPath/a/c.dart',
-        'part of l; class C {} enum E { v } typedef F();');
-    var library = await buildLibrary('import "a/b.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @21
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-        static e @26
-          reference: <testLibraryFragment>::@topLevelVariable::e
-          enclosingElement: <testLibraryFragment>
-          type: E
-        static f @31
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-            alias: package:test/a/b.dart::@fragment::package:test/a/c.dart::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibraryFragment>::@getter::e
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibraryFragment>::@setter::e
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-            alias: package:test/a/b.dart::@fragment::package:test/a/c.dart::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: package:test/a/b.dart::@fragment::package:test/a/c.dart::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_import_relative() async {
-    addSource(
-        '$testPackageLibPath/a.dart', 'class C {} enum E { v } typedef F();');
-    var library = await buildLibrary('import "a.dart"; C c; E e; F f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @19
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C
-        static e @24
-          reference: <testLibraryFragment>::@topLevelVariable::e
-          enclosingElement: <testLibraryFragment>
-          type: E
-        static f @29
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-            alias: package:test/a.dart::<fragment>::@typeAlias::F
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C
-          returnType: void
-        synthetic static get e @-1
-          reference: <testLibraryFragment>::@getter::e
-          enclosingElement: <testLibraryFragment>
-          returnType: E
-        synthetic static set e= @-1
-          reference: <testLibraryFragment>::@setter::e
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _e @-1
-              type: E
-          returnType: void
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-            alias: package:test/a.dart::<fragment>::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: package:test/a.dart::<fragment>::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_typedef() async {
-    var library = await buildLibrary('typedef F(); F f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-      topLevelVariables
-        static f @15
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function()
-            alias: <testLibraryFragment>::@typeAlias::F
-      accessors
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function()
-            alias: <testLibraryFragment>::@typeAlias::F
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function()
-                alias: <testLibraryFragment>::@typeAlias::F
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_typedef_with_type_arguments() async {
-    var library =
-        await buildLibrary('typedef U F<T, U>(T t); F<int, String> f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @10
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @12
-              defaultType: dynamic
-            covariant U @15
-              defaultType: dynamic
-          aliasedType: U Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional t @20
-                type: T
-            returnType: U
-      topLevelVariables
-        static f @39
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: String Function(int)
-            alias: <testLibraryFragment>::@typeAlias::F
-              typeArguments
-                int
-                String
-      accessors
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: String Function(int)
-            alias: <testLibraryFragment>::@typeAlias::F
-              typeArguments
-                int
-                String
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: String Function(int)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    int
-                    String
-          returnType: void
-''');
-  }
-
-  test_type_reference_to_typedef_with_type_arguments_implicit() async {
-    var library = await buildLibrary('typedef U F<T, U>(T t); F f;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @10
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @12
-              defaultType: dynamic
-            covariant U @15
-              defaultType: dynamic
-          aliasedType: U Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional t @20
-                type: T
-            returnType: U
-      topLevelVariables
-        static f @26
-          reference: <testLibraryFragment>::@topLevelVariable::f
-          enclosingElement: <testLibraryFragment>
-          type: dynamic Function(dynamic)
-            alias: <testLibraryFragment>::@typeAlias::F
-              typeArguments
-                dynamic
-                dynamic
-      accessors
-        synthetic static get f @-1
-          reference: <testLibraryFragment>::@getter::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic Function(dynamic)
-            alias: <testLibraryFragment>::@typeAlias::F
-              typeArguments
-                dynamic
-                dynamic
-        synthetic static set f= @-1
-          reference: <testLibraryFragment>::@setter::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _f @-1
-              type: dynamic Function(dynamic)
-                alias: <testLibraryFragment>::@typeAlias::F
-                  typeArguments
-                    dynamic
-                    dynamic
-          returnType: void
-''');
-  }
-
-  test_type_unresolved() async {
-    var library = await buildLibrary('C c;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static c @2
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: InvalidType
-          returnType: void
-''');
-  }
-
-  test_type_unresolved_prefixed() async {
-    var library = await buildLibrary('import "dart:core" as core; core.C c;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:core as core @22
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    core @22
-      reference: <testLibraryFragment>::@prefix::core
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:core as core @22
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        core @22
-          reference: <testLibraryFragment>::@prefix::core
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static c @35
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: InvalidType
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: InvalidType
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: InvalidType
-          returnType: void
-''');
-  }
-
-  test_typeAlias_formalParameters_optional() async {
-    var library = await buildLibrary(r'''
-typedef A = void Function({int p});
-
-void f(A a) {}
-''');
-    configuration.withFunctionTypeParameters = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: void Function({int p})
-            parameters
-              optionalNamed p @-1
-                type: int
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              optionalNamed p @31
-                type: int
-            returnType: void
-      functions
-        f @42
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @46
-              type: void Function({int p})
-                alias: <testLibraryFragment>::@typeAlias::A
-                parameters
-                  optionalNamed p @-1
-                    type: int
-          returnType: void
-''');
-  }
-
-  test_typeAlias_parameter_typeParameters() async {
-    var library = await buildLibrary(r'''
-typedef void F(T a<T, U>(U u));
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function(T Function<T, U>(U))
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional a @17
-                type: T Function<T, U>(U)
-                typeParameters
-                  covariant T @19
-                  covariant U @22
-                parameters
-                  requiredPositional u @27
-                    type: U
-            returnType: void
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_contravariant() async {
-    var library = await buildLibrary(r'''
-typedef F<T> = void Function(T);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          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 {
-    var library = await buildLibrary(r'''
-typedef F1<T> = void Function(T);
-typedef F2<T> = F1<T> Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F1 @8
-          reference: <testLibraryFragment>::@typeAlias::F1
-          typeParameters
-            contravariant T @11
-              defaultType: dynamic
-          aliasedType: void Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional @-1
-                type: T
-            returnType: void
-        F2 @42
-          reference: <testLibraryFragment>::@typeAlias::F2
-          typeParameters
-            contravariant T @45
-              defaultType: dynamic
-          aliasedType: void Function(T) Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void Function(T)
-              alias: <testLibraryFragment>::@typeAlias::F1
-                typeArguments
-                  T
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_covariant() async {
-    var library = await buildLibrary(r'''
-typedef F<T> = T Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: T Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: T
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_covariant2() async {
-    var library = await buildLibrary(r'''
-typedef F<T> = List<T> Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: List<T> Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: List<T>
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_covariant3() async {
-    var library = await buildLibrary(r'''
-typedef F1<T> = T Function();
-typedef F2<T> = F1<T> Function();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F1 @8
-          reference: <testLibraryFragment>::@typeAlias::F1
-          typeParameters
-            covariant T @11
-              defaultType: dynamic
-          aliasedType: T Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: T
-        F2 @38
-          reference: <testLibraryFragment>::@typeAlias::F2
-          typeParameters
-            covariant T @41
-              defaultType: dynamic
-          aliasedType: T Function() Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: T Function()
-              alias: <testLibraryFragment>::@typeAlias::F1
-                typeArguments
-                  T
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_covariant4() async {
-    var library = await buildLibrary(r'''
-typedef F1<T> = void Function(T);
-typedef F2<T> = void Function(F1<T>);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F1 @8
-          reference: <testLibraryFragment>::@typeAlias::F1
-          typeParameters
-            contravariant T @11
-              defaultType: dynamic
-          aliasedType: void Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional @-1
-                type: T
-            returnType: void
-        F2 @42
-          reference: <testLibraryFragment>::@typeAlias::F2
-          typeParameters
-            covariant T @45
-              defaultType: dynamic
-          aliasedType: void Function(void Function(T))
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional @-1
-                type: void Function(T)
-                  alias: <testLibraryFragment>::@typeAlias::F1
-                    typeArguments
-                      T
-            returnType: void
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_invalid() async {
-    var library = await buildLibrary(r'''
-class A {}
-typedef F<T> = void Function(A<int>);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      typeAliases
-        F @19
-          reference: <testLibraryFragment>::@typeAlias::F
-          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 {
-    var library = await buildLibrary(r'''
-typedef F = void Function();
-typedef G<T> = void Function(F<int>);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-        G @37
-          reference: <testLibraryFragment>::@typeAlias::G
-          typeParameters
-            unrelated T @39
-              defaultType: dynamic
-          aliasedType: void Function(void Function())
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional @-1
-                type: void Function()
-                  alias: <testLibraryFragment>::@typeAlias::F
-            returnType: void
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_invariant() async {
-    var library = await buildLibrary(r'''
-typedef F<T> = T Function(T);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          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 {
-    var library = await buildLibrary(r'''
-typedef F1<T> = T Function();
-typedef F2<T> = F1<T> Function(T);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F1 @8
-          reference: <testLibraryFragment>::@typeAlias::F1
-          typeParameters
-            covariant T @11
-              defaultType: dynamic
-          aliasedType: T Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: T
-        F2 @38
-          reference: <testLibraryFragment>::@typeAlias::F2
-          typeParameters
-            invariant T @41
-              defaultType: dynamic
-          aliasedType: T Function() Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional @-1
-                type: T
-            returnType: T Function()
-              alias: <testLibraryFragment>::@typeAlias::F1
-                typeArguments
-                  T
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_function_unrelated() async {
-    var library = await buildLibrary(r'''
-typedef F<T> = void Function(int);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          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 {
-    var library = await buildLibrary(r'''
-typedef A<T> = List<void Function(T)>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            contravariant T @10
-              defaultType: dynamic
-          aliasedType: List<void Function(T)>
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_interface_contravariant2() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = void Function(T);
-typedef B<T> = List<A<T>>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            contravariant T @10
-              defaultType: dynamic
-          aliasedType: void Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional @-1
-                type: T
-            returnType: void
-        B @41
-          reference: <testLibraryFragment>::@typeAlias::B
-          typeParameters
-            contravariant T @43
-              defaultType: dynamic
-          aliasedType: List<void Function(T)>
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_interface_covariant() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = List<T>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: List<T>
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_interface_covariant2() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = Map<int, T>;
-typedef B<T> = List<A<T>>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: Map<int, T>
-        B @36
-          reference: <testLibraryFragment>::@typeAlias::B
-          typeParameters
-            covariant T @38
-              defaultType: dynamic
-          aliasedType: List<Map<int, T>>
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_record_contravariant() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = (void Function(T), int);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            contravariant T @10
-              defaultType: dynamic
-          aliasedType: (void Function(T), int)
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_record_contravariant2() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = (void Function(T), int);
-typedef B<T> = List<A<T>>;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            contravariant T @10
-              defaultType: dynamic
-          aliasedType: (void Function(T), int)
-        B @48
-          reference: <testLibraryFragment>::@typeAlias::B
-          typeParameters
-            contravariant T @50
-              defaultType: dynamic
-          aliasedType: List<(void Function(T), int)>
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_record_covariant() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = (T, int);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: (T, int)
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_record_invariant() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = (T Function(T), int);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            invariant T @10
-              defaultType: dynamic
-          aliasedType: (T Function(T), int)
-''');
-  }
-
-  test_typeAlias_typeParameters_variance_record_unrelated() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = (int, String);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            unrelated T @10
-              defaultType: dynamic
-          aliasedType: (int, String)
-''');
-  }
-
-  test_typedef_function_generic() async {
-    var library = await buildLibrary(
-        'typedef F<T> = int Function<S>(List<S> list, num Function<A>(A), T);');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @10
-              defaultType: dynamic
-          aliasedType: int Function<S>(List<S>, num Function<A>(A), T)
-          aliasedElement: GenericFunctionTypeElement
-            typeParameters
-              covariant S @28
-            parameters
-              requiredPositional list @39
-                type: List<S>
-              requiredPositional @-1
-                type: num Function<A>(A)
-              requiredPositional @-1
-                type: T
-            returnType: int
-''');
-  }
-
-  test_typedef_function_generic_asFieldType() async {
-    var library = await buildLibrary(r'''
-typedef Foo<S> = S Function<T>(T x);
-class A {
-  Foo<int> f;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @43
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          fields
-            f @58
-              reference: <testLibraryFragment>::@class::A::@field::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              type: int Function<T>(T)
-                alias: <testLibraryFragment>::@typeAlias::Foo
-                  typeArguments
-                    int
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-          accessors
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@class::A::@getter::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              returnType: int Function<T>(T)
-                alias: <testLibraryFragment>::@typeAlias::Foo
-                  typeArguments
-                    int
-            synthetic set f= @-1
-              reference: <testLibraryFragment>::@class::A::@setter::f
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _f @-1
-                  type: int Function<T>(T)
-                    alias: <testLibraryFragment>::@typeAlias::Foo
-                      typeArguments
-                        int
-              returnType: void
-      typeAliases
-        Foo @8
-          reference: <testLibraryFragment>::@typeAlias::Foo
-          typeParameters
-            covariant S @12
-              defaultType: dynamic
-          aliasedType: S Function<T>(T)
-          aliasedElement: GenericFunctionTypeElement
-            typeParameters
-              covariant T @28
-            parameters
-              requiredPositional x @33
-                type: T
-            returnType: S
-''');
-  }
-
-  test_typedef_function_notSimplyBounded_dependency_via_param_type_name_included() async {
-    // F is considered "not simply bounded" because it expands to a type that
-    // refers to C, which is not simply bounded.
-    var library = await buildLibrary('''
-typedef F = void Function(C c);
-class C<T extends C<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @38
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @40
-              bound: C<T>
-              defaultType: C<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        notSimplyBounded F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function(C<C<dynamic>>)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional c @28
-                type: C<C<dynamic>>
-            returnType: void
-''');
-  }
-
-  test_typedef_function_notSimplyBounded_dependency_via_param_type_name_omitted() async {
-    // F is considered "not simply bounded" because it expands to a type that
-    // refers to C, which is not simply bounded.
-    var library = await buildLibrary('''
-typedef F = void Function(C);
-class C<T extends C<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @36
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @38
-              bound: C<T>
-              defaultType: C<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        notSimplyBounded F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function(C<C<dynamic>>)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional @-1
-                type: C<C<dynamic>>
-            returnType: void
-''');
-  }
-
-  test_typedef_function_notSimplyBounded_dependency_via_return_type() async {
-    // F is considered "not simply bounded" because it expands to a type that
-    // refers to C, which is not simply bounded.
-    var library = await buildLibrary('''
-typedef F = C Function();
-class C<T extends C<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @32
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @34
-              bound: C<T>
-              defaultType: C<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        notSimplyBounded F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: C<C<dynamic>> Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: C<C<dynamic>>
-''');
-  }
-
-  test_typedef_function_typeParameters_f_bound_simple() async {
-    var library =
-        await buildLibrary('typedef F<T extends U, U> = U Function(T t);');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        notSimplyBounded F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @10
-              bound: U
-              defaultType: Never
-            covariant U @23
-              defaultType: dynamic
-          aliasedType: U Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional t @41
-                type: T
-            returnType: U
-''');
-  }
-
-  test_typedef_legacy_documented() async {
-    var library = await buildLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-typedef F();''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @68
-          reference: <testLibraryFragment>::@typeAlias::F
-          documentationComment: /**\n * Docs\n */
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_notSimplyBounded_dependency_via_param_type() async {
-    // F is considered "not simply bounded" because it expands to a type that
-    // refers to C, which is not simply bounded.
-    var library = await buildLibrary('''
-typedef void F(C c);
-class C<T extends C<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @27
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @29
-              bound: C<T>
-              defaultType: C<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        functionTypeAliasBased notSimplyBounded F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function(C<C<dynamic>>)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional c @17
-                type: C<C<dynamic>>
-            returnType: void
-''');
-  }
-
-  test_typedef_legacy_notSimplyBounded_dependency_via_return_type() async {
-    // F is considered "not simply bounded" because it expands to a type that
-    // refers to C, which is not simply bounded.
-    var library = await buildLibrary('''
-typedef C F();
-class C<T extends C<T>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        notSimplyBounded class C @21
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @23
-              bound: C<T>
-              defaultType: C<dynamic>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        functionTypeAliasBased notSimplyBounded F @10
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: C<C<dynamic>> Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: C<C<dynamic>>
-''');
-  }
-
-  test_typedef_legacy_notSimplyBounded_self() async {
-    var library = await buildLibrary('''
-typedef void F<T extends F>();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased notSimplyBounded F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated T @15
-              bound: dynamic
-              defaultType: dynamic
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_typedef_legacy_notSimplyBounded_simple_because_non_generic() async {
-    var library = await buildLibrary('''
-typedef void F();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_typedef_legacy_notSimplyBounded_simple_no_bounds() async {
-    var library = await buildLibrary('typedef void F<T>();');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated T @15
-              defaultType: dynamic
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_typedef_legacy_parameter_hasImplicitType() async {
-    var library = await buildLibrary(r'''
-typedef void F(int a, b, [int c, d]);
-''');
-    var F = library.definingCompilationUnit.typeAliases.single;
-    var function = F.aliasedElement as GenericFunctionTypeElement;
-    // TODO(scheglov): Use better textual presentation with all information.
-    expect(function.parameters[0].hasImplicitType, false);
-    expect(function.parameters[1].hasImplicitType, true);
-    expect(function.parameters[2].hasImplicitType, false);
-    expect(function.parameters[3].hasImplicitType, true);
-  }
-
-  test_typedef_legacy_parameter_parameters() async {
-    var library = await buildLibrary('typedef F(g(x, y));');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function(dynamic Function(dynamic, dynamic))
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional g @10
-                type: dynamic Function(dynamic, dynamic)
-                parameters
-                  requiredPositional x @12
-                    type: dynamic
-                  requiredPositional y @15
-                    type: dynamic
-            returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameter_parameters_in_generic_class() async {
-    var library = await buildLibrary('typedef F<A, B>(A g(B x));');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant A @10
-              defaultType: dynamic
-            covariant B @13
-              defaultType: dynamic
-          aliasedType: dynamic Function(A Function(B))
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional g @18
-                type: A Function(B)
-                parameters
-                  requiredPositional x @22
-                    type: B
-            returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameter_return_type() async {
-    var library = await buildLibrary('typedef F(int g());');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function(int Function())
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional g @14
-                type: int Function()
-            returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameter_type() async {
-    var library = await buildLibrary('typedef F(int i);');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function(int)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional i @14
-                type: int
-            returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameter_type_generic() async {
-    var library = await buildLibrary('typedef F<T>(T t);');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @10
-              defaultType: dynamic
-          aliasedType: dynamic Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional t @15
-                type: T
-            returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameters() async {
-    var library = await buildLibrary('typedef F(x, y);');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function(dynamic, dynamic)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional x @10
-                type: dynamic
-              requiredPositional y @13
-                type: dynamic
-            returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_parameters_named() async {
-    var library = await buildLibrary('typedef F({y, z, x});');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function({dynamic x, dynamic y, dynamic z})
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              optionalNamed y @11
-                type: dynamic
-              optionalNamed z @14
-                type: dynamic
-              optionalNamed x @17
-                type: dynamic
-            returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_return_type() async {
-    var library = await buildLibrary('typedef int F();');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @12
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: int Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: int
-''');
-  }
-
-  test_typedef_legacy_return_type_generic() async {
-    var library = await buildLibrary('typedef T F<T>();');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @10
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            covariant T @12
-              defaultType: dynamic
-          aliasedType: T Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: T
-''');
-  }
-
-  test_typedef_legacy_return_type_implicit() async {
-    var library = await buildLibrary('typedef F();');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: dynamic Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: dynamic
-''');
-  }
-
-  test_typedef_legacy_return_type_void() async {
-    var library = await buildLibrary('typedef void F();');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_typedef_legacy_typeParameters() async {
-    var library = await buildLibrary('typedef U F<T, U>(T t);');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased F @10
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @12
-              defaultType: dynamic
-            covariant U @15
-              defaultType: dynamic
-          aliasedType: U Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional t @20
-                type: T
-            returnType: U
-''');
-  }
-
-  test_typedef_legacy_typeParameters_bound() async {
-    var library = await buildLibrary(
-        'typedef U F<T extends Object, U extends D>(T t); class D {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class D @55
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-      typeAliases
-        functionTypeAliasBased F @10
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @12
-              bound: Object
-              defaultType: Object
-            covariant U @30
-              bound: D
-              defaultType: D
-          aliasedType: U Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional t @45
-                type: T
-            returnType: U
-''');
-  }
-
-  test_typedef_legacy_typeParameters_bound_recursive() async {
-    var library = await buildLibrary('typedef void F<T extends F>();');
-    // Typedefs cannot reference themselves.
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased notSimplyBounded F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated T @15
-              bound: dynamic
-              defaultType: dynamic
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_typedef_legacy_typeParameters_bound_recursive2() async {
-    var library = await buildLibrary('typedef void F<T extends List<F>>();');
-    // Typedefs cannot reference themselves.
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased notSimplyBounded F @13
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            unrelated T @15
-              bound: List<dynamic>
-              defaultType: dynamic
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-''');
-  }
-
-  test_typedef_legacy_typeParameters_f_bound_complex() async {
-    var library = await buildLibrary('typedef U F<T extends List<U>, U>(T t);');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased notSimplyBounded F @10
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @12
-              bound: List<U>
-              defaultType: List<Never>
-            covariant U @31
-              defaultType: dynamic
-          aliasedType: U Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional t @36
-                type: T
-            returnType: U
-''');
-  }
-
-  test_typedef_legacy_typeParameters_f_bound_simple() async {
-    var library = await buildLibrary('typedef U F<T extends U, U>(T t);');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        functionTypeAliasBased notSimplyBounded F @10
-          reference: <testLibraryFragment>::@typeAlias::F
-          typeParameters
-            contravariant T @12
-              bound: U
-              defaultType: Never
-            covariant U @25
-              defaultType: dynamic
-          aliasedType: U Function(T)
-          aliasedElement: GenericFunctionTypeElement
-            parameters
-              requiredPositional t @30
-                type: T
-            returnType: U
-''');
-  }
-
-  @SkippedTest(
-    issue: 'https://github.com/dart-lang/sdk/issues/45291',
-    reason: 'Type dynamic is special, no support for its aliases yet',
-  )
-  test_typedef_nonFunction_aliasElement_dynamic() async {
-    var library = await buildLibrary(r'''
-typedef A = dynamic;
-void f(A a) {}
-''');
-
-    checkElementText(library, r'''
-typedef A = dynamic;
-void f(dynamic<aliasElement: self::@typeAlias::A> a) {}
-''');
-  }
-
-  test_typedef_nonFunction_aliasElement_functionType() async {
-    var library = await buildLibrary(r'''
-typedef A1 = void Function();
-typedef A2<R> = R Function();
-void f1(A1 a) {}
-void f2(A2<int> a) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A1 @8
-          reference: <testLibraryFragment>::@typeAlias::A1
-          aliasedType: void Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: void
-        A2 @38
-          reference: <testLibraryFragment>::@typeAlias::A2
-          typeParameters
-            covariant R @41
-              defaultType: dynamic
-          aliasedType: R Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: R
-      functions
-        f1 @65
-          reference: <testLibraryFragment>::@function::f1
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @71
-              type: void Function()
-                alias: <testLibraryFragment>::@typeAlias::A1
-          returnType: void
-        f2 @82
-          reference: <testLibraryFragment>::@function::f2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @93
-              type: int Function()
-                alias: <testLibraryFragment>::@typeAlias::A2
-                  typeArguments
-                    int
-          returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_aliasElement_interfaceType() async {
-    var library = await buildLibrary(r'''
-typedef A1 = List<int>;
-typedef A2<T, U> = Map<T, U>;
-void f1(A1 a) {}
-void f2(A2<int, String> a) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A1 @8
-          reference: <testLibraryFragment>::@typeAlias::A1
-          aliasedType: List<int>
-        A2 @32
-          reference: <testLibraryFragment>::@typeAlias::A2
-          typeParameters
-            covariant T @35
-              defaultType: dynamic
-            covariant U @38
-              defaultType: dynamic
-          aliasedType: Map<T, U>
-      functions
-        f1 @59
-          reference: <testLibraryFragment>::@function::f1
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @65
-              type: List<int>
-                alias: <testLibraryFragment>::@typeAlias::A1
-          returnType: void
-        f2 @76
-          reference: <testLibraryFragment>::@function::f2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @95
-              type: Map<int, String>
-                alias: <testLibraryFragment>::@typeAlias::A2
-                  typeArguments
-                    int
-                    String
-          returnType: void
-''');
-  }
-
-  @SkippedTest(
-    issue: 'https://github.com/dart-lang/sdk/issues/45291',
-    reason: 'Type Never is special, no support for its aliases yet',
-  )
-  test_typedef_nonFunction_aliasElement_never() async {
-    var library = await buildLibrary(r'''
-typedef A1 = Never;
-typedef A2<T> = Never?;
-void f1(A1 a) {}
-void f2(A2<int> a) {}
-''');
-
-    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) {}
-''');
-  }
-
-  test_typedef_nonFunction_aliasElement_recordType_generic() async {
-    var library = await buildLibrary(r'''
-typedef A<T, U> = (T, U);
-void f(A<int, String> a) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-            covariant U @13
-              defaultType: dynamic
-          aliasedType: (T, U)
-      functions
-        f @31
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @48
-              type: (int, String)
-                alias: <testLibraryFragment>::@typeAlias::A
-                  typeArguments
-                    int
-                    String
-          returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_aliasElement_typeParameterType() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = T;
-void f<U>(A<U> a) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: T
-      functions
-        f @23
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U @25
-              defaultType: dynamic
-          parameters
-            requiredPositional a @33
-              type: U
-                alias: <testLibraryFragment>::@typeAlias::A
-                  typeArguments
-                    U
-          returnType: void
-''');
-  }
-
-  @SkippedTest(
-    issue: 'https://github.com/dart-lang/sdk/issues/45291',
-    reason: 'Type void is special, no support for its aliases yet',
-  )
-  test_typedef_nonFunction_aliasElement_void() async {
-    var library = await buildLibrary(r'''
-typedef A = void;
-void f(A a) {}
-''');
-
-    checkElementText(library, r'''
-typedef A = void;
-void f(void<aliasElement: self::@typeAlias::A> a) {}
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_interfaceType_none() async {
-    var library = await buildLibrary(r'''
-typedef X<T> = A<int, T>;
-class A<T, U> {}
-class B implements X<String> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @32
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @34
-              defaultType: dynamic
-            covariant U @37
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @49
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            A<int, String>
-              alias: <testLibraryFragment>::@typeAlias::X
-                typeArguments
-                  String
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: A<int, T>
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_interfaceType_question() async {
-    var library = await buildLibrary(r'''
-typedef X<T> = A<T>?;
-class A<T> {}
-class B {}
-class C {}
-class D implements B, X<int>, C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @28
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @30
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @42
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @53
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @64
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            B
-            C
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: A<T>?
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_interfaceType_question2() async {
-    var library = await buildLibrary(r'''
-typedef X<T> = A<T?>;
-class A<T> {}
-class B {}
-class C {}
-class D implements B, X<int>, C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @28
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @30
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @42
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @53
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-        class D @64
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            B
-            A<int?>
-              alias: <testLibraryFragment>::@typeAlias::X
-                typeArguments
-                  int
-            C
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: A<T?>
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_Never_none() async {
-    var library = await buildLibrary(r'''
-typedef X = Never;
-class A implements X {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @25
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: Never
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_Null_none() async {
-    var library = await buildLibrary(r'''
-typedef X = Null;
-class A implements X {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @24
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: Null
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_typeParameterType() async {
-    var library = await buildLibrary(r'''
-typedef X<T> = T;
-class A {}
-class B {}
-class C<U> implements A, X<U>, B {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @24
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @35
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @46
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U @48
-              defaultType: dynamic
-          interfaces
-            A
-            B
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: T
-''');
-  }
-
-  test_typedef_nonFunction_asInterfaceType_void() async {
-    var library = await buildLibrary(r'''
-typedef X = void;
-class A {}
-class B {}
-class C implements A, X, B {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @24
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @35
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-        class C @46
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            A
-            B
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: void
-''');
-  }
-
-  test_typedef_nonFunction_asMixinType_none() async {
-    var library = await buildLibrary(r'''
-typedef X = A<int>;
-class A<T> {}
-class B with X {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @26
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @28
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @40
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            A<int>
-              alias: <testLibraryFragment>::@typeAlias::X
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: A<int>
-''');
-  }
-
-  test_typedef_nonFunction_asMixinType_question() async {
-    var library = await buildLibrary(r'''
-typedef X = A<int>?;
-class A<T> {}
-mixin M1 {}
-mixin M2 {}
-class B with M1, X, M2 {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @27
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @29
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @65
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M1
-            M2
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-      mixins
-        mixin M1 @41
-          reference: <testLibraryFragment>::@mixin::M1
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-        mixin M2 @53
-          reference: <testLibraryFragment>::@mixin::M2
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: A<int>?
-''');
-  }
-
-  test_typedef_nonFunction_asMixinType_question2() async {
-    var library = await buildLibrary(r'''
-typedef X = A<int?>;
-class A<T> {}
-mixin M1 {}
-mixin M2 {}
-class B with M1, X, M2 {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @27
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @29
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @65
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M1
-            A<int?>
-              alias: <testLibraryFragment>::@typeAlias::X
-            M2
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-      mixins
-        mixin M1 @41
-          reference: <testLibraryFragment>::@mixin::M1
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-        mixin M2 @53
-          reference: <testLibraryFragment>::@mixin::M2
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: A<int?>
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_Never_none() async {
-    var library = await buildLibrary(r'''
-typedef X = Never;
-class A extends X {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @25
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: Never
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_none() async {
-    var library = await buildLibrary(r'''
-typedef X = A<int>;
-class A<T> {}
-class B extends X {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @26
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @28
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @40
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A<int>
-            alias: <testLibraryFragment>::@typeAlias::X
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: int}
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: A<int>
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_none_viaTypeParameter() async {
-    var library = await buildLibrary(r'''
-typedef X<T> = T;
-class A<T> {}
-class B extends X<A<int>> {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @24
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @26
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class B @38
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: A<int>
-            alias: <testLibraryFragment>::@typeAlias::X
-              typeArguments
-                A<int>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: int}
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: T
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_Null_none() async {
-    var library = await buildLibrary(r'''
-typedef X = Null;
-class A extends X {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @24
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: Null
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_question() async {
-    var library = await buildLibrary(r'''
-typedef X = A<int>?;
-class A<T> {}
-class D extends X {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @27
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @29
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class D @41
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: A<int>?
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_interfaceType_question2() async {
-    var library = await buildLibrary(r'''
-typedef X = A<int?>;
-class A<T> {}
-class D extends X {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @27
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @29
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-        class D @41
-          reference: <testLibraryFragment>::@class::D
-          enclosingElement: <testLibraryFragment>
-          supertype: A<int?>
-            alias: <testLibraryFragment>::@typeAlias::X
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::D::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::D
-              superConstructor: ConstructorMember
-                base: <testLibraryFragment>::@class::A::@constructor::new
-                substitution: {T: int?}
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: A<int?>
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_Never_none() async {
-    var library = await buildLibrary(r'''
-typedef X = Never;
-class A extends X {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @25
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: Never
-''');
-  }
-
-  test_typedef_nonFunction_asSuperType_Null_none() async {
-    var library = await buildLibrary(r'''
-typedef X = Null;
-class A extends X {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @24
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      typeAliases
-        X @8
-          reference: <testLibraryFragment>::@typeAlias::X
-          aliasedType: Null
-''');
-  }
-
-  test_typedef_nonFunction_using_dynamic() async {
-    var library = await buildLibrary(r'''
-typedef A = dynamic;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: dynamic
-      functions
-        f @26
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @30
-              type: dynamic
-          returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_interface_disabled() async {
-    var library = await buildLibrary(r'''
-// @dart = 2.12
-typedef A = int;
-void f(A a) {}
-''');
-
-    var alias = library.definingCompilationUnit.typeAliases[0];
-    _assertTypeStr(alias.aliasedType, 'dynamic Function()');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @24
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: dynamic Function()
-      functions
-        f @38
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @42
-              type: dynamic Function()
-                alias: <testLibraryFragment>::@typeAlias::A
-          returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_interface_noTypeParameters() async {
-    var library = await buildLibrary(r'''
-typedef A = int;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: int
-      functions
-        f @22
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @26
-              type: int
-                alias: <testLibraryFragment>::@typeAlias::A
-          returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_interface_noTypeParameters_question() async {
-    var library = await buildLibrary(r'''
-typedef A = int?;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: int?
-      functions
-        f @23
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @27
-              type: int?
-                alias: <testLibraryFragment>::@typeAlias::A
-          returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_interface_withTypeParameters() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = Map<int, T>;
-void f(A<String> a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: Map<int, T>
-      functions
-        f @33
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @45
-              type: Map<int, String>
-                alias: <testLibraryFragment>::@typeAlias::A
-                  typeArguments
-                    String
-          returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_Never_none() async {
-    var library = await buildLibrary(r'''
-typedef A = Never;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: Never
-      functions
-        f @24
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @28
-              type: Never
-          returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_Never_question() async {
-    var library = await buildLibrary(r'''
-typedef A = Never?;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: Never?
-      functions
-        f @25
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @29
-              type: Never?
-          returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_typeParameter_none() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = T;
-void f1(A a) {}
-void f2(A<int> a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: T
-      functions
-        f1 @23
-          reference: <testLibraryFragment>::@function::f1
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @28
-              type: dynamic
-          returnType: void
-        f2 @39
-          reference: <testLibraryFragment>::@function::f2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @49
-              type: int
-                alias: <testLibraryFragment>::@typeAlias::A
-                  typeArguments
-                    int
-          returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_typeParameter_question() async {
-    var library = await buildLibrary(r'''
-typedef A<T> = T?;
-void f1(A a) {}
-void f2(A<int> a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          typeParameters
-            covariant T @10
-              defaultType: dynamic
-          aliasedType: T?
-      functions
-        f1 @24
-          reference: <testLibraryFragment>::@function::f1
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @29
-              type: dynamic
-          returnType: void
-        f2 @40
-          reference: <testLibraryFragment>::@function::f2
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @50
-              type: int?
-                alias: <testLibraryFragment>::@typeAlias::A
-                  typeArguments
-                    int
-          returnType: void
-''');
-  }
-
-  test_typedef_nonFunction_using_void() async {
-    var library = await buildLibrary(r'''
-typedef A = void;
-void f(A a) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: void
-      functions
-        f @23
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional a @27
-              type: void
-          returnType: void
-''');
-  }
-
-  test_typedef_selfReference_recordType() async {
-    var library = await buildLibrary(r'''
-typedef F = (F, int) Function();
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        notSimplyBounded F @8
-          reference: <testLibraryFragment>::@typeAlias::F
-          aliasedType: (dynamic, int) Function()
-          aliasedElement: GenericFunctionTypeElement
-            returnType: (dynamic, int)
-''');
-  }
-
-  test_typedefs() async {
-    var library = await buildLibrary('f() {} g() {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        f @0
-          reference: <testLibraryFragment>::@function::f
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        g @7
-          reference: <testLibraryFragment>::@function::g
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-''');
-  }
-
-  test_unit_implicitVariable_getterFirst() async {
-    var library = await buildLibrary('''
-int get x => 0;
-void set x(int value) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static get x @8
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        static set x= @25
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional value @31
-              type: int
-          returnType: void
-''');
-  }
-
-  test_unit_implicitVariable_setterFirst() async {
-    var library = await buildLibrary('''
-void set x(int value) {}
-int get x => 0;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static set x= @9
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional value @15
-              type: int
-          returnType: void
-        static get x @33
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_unit_variable_duplicate_getter() async {
-    var library = await buildLibrary('''
-int foo = 0;
-int get foo => 0;
-''');
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static foo @4
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          id: variable_0
-          getter: getter_0
-          setter: setter_0
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          id: variable_1
-          getter: getter_1
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo::@def::0
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_0
-          variable: variable_0
-        synthetic static set foo= @-1
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _foo @-1
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-        static get foo @21
-          reference: <testLibraryFragment>::@getter::foo::@def::1
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_1
-          variable: variable_1
-''');
-  }
-
-  test_unit_variable_duplicate_setter() async {
-    var library = await buildLibrary('''
-int foo = 0;
-set foo(int _) {}
-''');
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static foo @4
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          id: variable_0
-          getter: getter_0
-          setter: setter_0
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          id: variable_1
-          setter: setter_1
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_0
-          variable: variable_0
-        synthetic static set foo= @-1
-          reference: <testLibraryFragment>::@setter::foo::@def::0
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _foo @-1
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-        static set foo= @17
-          reference: <testLibraryFragment>::@setter::foo::@def::1
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _ @25
-              type: int
-          returnType: void
-          id: setter_1
-          variable: variable_1
-''');
-  }
-
-  test_unit_variable_final_withSetter() async {
-    var library = await buildLibrary(r'''
-final int foo = 0;
-set foo(int newValue) {}
-''');
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final foo @10
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          id: variable_0
-          getter: getter_0
-          setter: setter_0
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_0
-          variable: variable_0
-        static set foo= @23
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional newValue @31
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-''');
-  }
-
-  test_unresolved_annotation_instanceCreation_argument_super() async {
-    var library = await buildLibrary('''
-class A {
-  const A(_);
-}
-
-@A(super)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @20
-                  type: dynamic
-        class C @43
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @27
-              name: SimpleIdentifier
-                token: A @28
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @29
-                arguments
-                  SuperExpression
-                    superKeyword: super @30
-                    staticType: InvalidType
-                rightParenthesis: ) @35
-              element: <testLibraryFragment>::@class::A::@constructor::new
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_instanceCreation_argument_this() async {
-    var library = await buildLibrary('''
-class A {
-  const A(_);
-}
-
-@A(this)
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            const @18
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-              parameters
-                requiredPositional _ @20
-                  type: dynamic
-        class C @42
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @27
-              name: SimpleIdentifier
-                token: A @28
-                staticElement: <testLibraryFragment>::@class::A
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @29
-                arguments
-                  ThisExpression
-                    thisKeyword: this @30
-                    staticType: dynamic
-                rightParenthesis: ) @34
-              element: <testLibraryFragment>::@class::A::@constructor::new
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_namedConstructorCall_noClass() async {
-    var library = await buildLibrary('@foo.bar() class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @17
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @1
-                  staticElement: <null>
-                  staticType: null
-                period: . @4
-                identifier: SimpleIdentifier
-                  token: bar @5
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @8
-                rightParenthesis: ) @9
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_namedConstructorCall_noConstructor() async {
-    var library = await buildLibrary('@String.foo() class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @20
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: String @1
-                  staticElement: dart:core::<fragment>::@class::String
-                  staticType: null
-                period: . @7
-                identifier: SimpleIdentifier
-                  token: foo @8
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @11
-                rightParenthesis: ) @12
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_prefixedIdentifier_badPrefix() async {
-    var library = await buildLibrary('@foo.bar class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @15
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @1
-                  staticElement: <null>
-                  staticType: null
-                period: . @4
-                identifier: SimpleIdentifier
-                  token: bar @5
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-                staticType: null
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_prefixedIdentifier_noDeclaration() async {
-    var library =
-        await buildLibrary('import "dart:async" as foo; @foo.bar class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async as foo @23
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @23
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async as foo @23
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @23
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @43
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @28
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @29
-                  staticElement: <testLibraryFragment>::@prefix::foo
-                  staticType: null
-                period: . @32
-                identifier: SimpleIdentifier
-                  token: bar @33
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-                staticType: null
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_prefixedNamedConstructorCall_badPrefix() async {
-    var library = await buildLibrary('@foo.bar.baz() class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @21
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @1
-                  staticElement: <null>
-                  staticType: null
-                period: . @4
-                identifier: SimpleIdentifier
-                  token: bar @5
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-                staticType: null
-              period: . @8
-              constructorName: SimpleIdentifier
-                token: baz @9
-                staticElement: <null>
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @12
-                rightParenthesis: ) @13
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_prefixedNamedConstructorCall_noClass() async {
-    var library = await buildLibrary(
-        'import "dart:async" as foo; @foo.bar.baz() class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async as foo @23
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @23
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async as foo @23
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @23
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @49
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @28
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @29
-                  staticElement: <testLibraryFragment>::@prefix::foo
-                  staticType: null
-                period: . @32
-                identifier: SimpleIdentifier
-                  token: bar @33
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-                staticType: null
-              period: . @36
-              constructorName: SimpleIdentifier
-                token: baz @37
-                staticElement: <null>
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @40
-                rightParenthesis: ) @41
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_prefixedNamedConstructorCall_noConstructor() async {
-    var library = await buildLibrary(
-        'import "dart:async" as foo; @foo.Future.bar() class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async as foo @23
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @23
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async as foo @23
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @23
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @52
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @28
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @29
-                  staticElement: <testLibraryFragment>::@prefix::foo
-                  staticType: null
-                period: . @32
-                identifier: SimpleIdentifier
-                  token: Future @33
-                  staticElement: dart:async::<fragment>::@class::Future
-                  staticType: null
-                staticElement: dart:async::<fragment>::@class::Future
-                staticType: null
-              period: . @39
-              constructorName: SimpleIdentifier
-                token: bar @40
-                staticElement: <null>
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @43
-                rightParenthesis: ) @44
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_prefixedUnnamedConstructorCall_badPrefix() async {
-    var library = await buildLibrary('@foo.bar() class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @17
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @1
-                  staticElement: <null>
-                  staticType: null
-                period: . @4
-                identifier: SimpleIdentifier
-                  token: bar @5
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @8
-                rightParenthesis: ) @9
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_prefixedUnnamedConstructorCall_noClass() async {
-    var library =
-        await buildLibrary('import "dart:async" as foo; @foo.bar() class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    dart:async as foo @23
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  prefixes
-    foo @23
-      reference: <testLibraryFragment>::@prefix::foo
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        dart:async as foo @23
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      libraryImportPrefixes
-        foo @23
-          reference: <testLibraryFragment>::@prefix::foo
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @45
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @28
-              name: PrefixedIdentifier
-                prefix: SimpleIdentifier
-                  token: foo @29
-                  staticElement: <testLibraryFragment>::@prefix::foo
-                  staticType: null
-                period: . @32
-                identifier: SimpleIdentifier
-                  token: bar @33
-                  staticElement: <null>
-                  staticType: null
-                staticElement: <null>
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @36
-                rightParenthesis: ) @37
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_simpleIdentifier() async {
-    var library = await buildLibrary('@foo class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @11
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: SimpleIdentifier
-                token: foo @1
-                staticElement: <null>
-                staticType: null
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_simpleIdentifier_multiplyDefined() async {
-    addSource('$testPackageLibPath/a.dart', 'const v = 0;');
-    addSource('$testPackageLibPath/b.dart', 'const v = 0;');
-    var library = await buildLibrary('''
-import 'a.dart';
-import 'b.dart';
-
-@v
-class C {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      classes
-        class C @44
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @35
-              name: SimpleIdentifier
-                token: v @36
-                staticElement: <null>
-                staticType: null
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_annotation_unnamedConstructorCall_noClass() async {
-    var library = await buildLibrary('@foo() class C {}');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @13
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @0
-              name: SimpleIdentifier
-                token: foo @1
-                staticElement: <null>
-                staticType: null
-              arguments: ArgumentList
-                leftParenthesis: ( @4
-                rightParenthesis: ) @5
-              element: <null>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-''');
-  }
-
-  test_unresolved_export() async {
-    var library = await buildLibrary("export 'foo.dart';");
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryExports
-    package:test/foo.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryExports
-        package:test/foo.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_unresolved_import() async {
-    var library = await buildLibrary("import 'foo.dart';");
-    var importedLibrary = library.libraryImports[0].importedLibrary!;
-    expect(importedLibrary.loadLibraryFunction, isNotNull);
-    expect(importedLibrary.publicNamespace, isNotNull);
-    expect(importedLibrary.exportNamespace, isNotNull);
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/foo.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/foo.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-''');
-  }
-
-  test_unused_type_parameter() async {
-    var library = await buildLibrary('''
-class C<T> {
-  void f() {}
-}
-C<int> c;
-var v = c.f;
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class C @6
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::C::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::C
-          methods
-            f @20
-              reference: <testLibraryFragment>::@class::C::@method::f
-              enclosingElement: <testLibraryFragment>::@class::C
-              returnType: void
-      topLevelVariables
-        static c @36
-          reference: <testLibraryFragment>::@topLevelVariable::c
-          enclosingElement: <testLibraryFragment>
-          type: C<int>
-        static v @43
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: void Function()
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get c @-1
-          reference: <testLibraryFragment>::@getter::c
-          enclosingElement: <testLibraryFragment>
-          returnType: C<int>
-        synthetic static set c= @-1
-          reference: <testLibraryFragment>::@setter::c
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _c @-1
-              type: C<int>
-          returnType: void
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: void Function()
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: void Function()
-          returnType: void
-''');
-  }
-
-  test_variable() async {
-    var library = await buildLibrary('int x = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static x @4
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_variable_const() async {
-    var library = await buildLibrary('const int i = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const i @10
-          reference: <testLibraryFragment>::@topLevelVariable::i
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @14
-              staticType: int
-      accessors
-        synthetic static get i @-1
-          reference: <testLibraryFragment>::@getter::i
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_variable_const_late() async {
-    var library = await buildLibrary('late const int i = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static late const i @15
-          reference: <testLibraryFragment>::@topLevelVariable::i
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @19
-              staticType: int
-      accessors
-        synthetic static get i @-1
-          reference: <testLibraryFragment>::@getter::i
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_variable_documented() async {
-    var library = await buildLibrary('''
-// Extra comment so doc comment offset != 0
-/**
- * Docs
- */
-var x;''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static x @64
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /**\n * Docs\n */
-          type: dynamic
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: dynamic
-          returnType: void
-''');
-  }
-
-  test_variable_final() async {
-    var library = await buildLibrary('final int x = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final x @10
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_variable_getterInLib_setterInPart() async {
-    addSource('$testPackageLibPath/a.dart', '''
-part of my.lib;
-void set x(int _) {}
-''');
-    var library = await buildLibrary('''
-library my.lib;
-part 'a.dart';
-int get x => 42;''');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static get x @39
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::x
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-      accessors
-        static set x= @25
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::x
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _ @31
-              type: int
-          returnType: void
-''');
-  }
-
-  test_variable_getterInPart_setterInLib() async {
-    addSource('$testPackageLibPath/a.dart', '''
-part of my.lib;
-int get x => 42;
-''');
-    var library = await buildLibrary('''
-library my.lib;
-part 'a.dart';
-void set x(int _) {}
-''');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static set x= @40
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _ @46
-              type: int
-          returnType: void
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::x
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-      accessors
-        static get x @24
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::x
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-''');
-  }
-
-  test_variable_getterInPart_setterInPart() async {
-    addSource('$testPackageLibPath/a.dart', 'part of my.lib; int get x => 42;');
-    addSource(
-        '$testPackageLibPath/b.dart', 'part of my.lib; void set x(int _) {}');
-    var library =
-        await buildLibrary('library my.lib; part "a.dart"; part "b.dart";');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-    part_1
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-        part_1
-          uri: package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/b.dart
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::x
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-      accessors
-        static get x @24
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::x
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::x
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          type: int
-      accessors
-        static set x= @25
-          reference: <testLibrary>::@fragment::package:test/b.dart::@setter::x
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          parameters
-            requiredPositional _ @31
-              type: int
-          returnType: void
-''');
-  }
-
-  test_variable_implicit() async {
-    var library = await buildLibrary('int get x => 0;');
-
-    // We intentionally don't check the text, because we want to test
-    // requesting individual elements, not all accessors/variables at once.
-    var getter = _elementOfDefiningUnit(library, ['@getter', 'x'])
-        as PropertyAccessorElementImpl;
-    var variable = getter.variable2 as TopLevelVariableElementImpl;
-    expect(variable, isNotNull);
-    expect(variable.isFinal, isFalse);
-    expect(variable.getter, same(getter));
-    _assertTypeStr(variable.type, 'int');
-    expect(
-      variable,
-      same(
-        _elementOfDefiningUnit(library, ['@topLevelVariable', 'x']),
-      ),
-    );
-  }
-
-  test_variable_implicit_type() async {
-    var library = await buildLibrary('var x;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static x @4
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: dynamic
-          returnType: void
-''');
-  }
-
-  test_variable_initializer() async {
-    var library = await buildLibrary('int v = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static v @4
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_variable_initializer_final() async {
-    var library = await buildLibrary('final int v = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final v @10
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_variable_initializer_final_untyped() async {
-    var library = await buildLibrary('final v = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final v @6
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_variable_initializer_recordType() async {
-    var library = await buildLibrary('''
-const x = (1, true);
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const x @6
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: (int, bool)
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            RecordLiteral
-              leftParenthesis: ( @10
-              fields
-                IntegerLiteral
-                  literal: 1 @11
-                  staticType: int
-                BooleanLiteral
-                  literal: true @14
-                  staticType: bool
-              rightParenthesis: ) @18
-              staticType: (int, bool)
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: (int, bool)
-''');
-  }
-
-  test_variable_initializer_staticMethod_ofExtension() async {
-    var library = await buildLibrary('''
-class A {}
-extension E on A {
-  static int f() => 0;
-}
-var x = E.f();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      extensions
-        E @21
-          reference: <testLibraryFragment>::@extension::E
-          enclosingElement: <testLibraryFragment>
-          extendedType: A
-          methods
-            static f @43
-              reference: <testLibraryFragment>::@extension::E::@method::f
-              enclosingElement: <testLibraryFragment>::@extension::E
-              returnType: int
-      topLevelVariables
-        static x @59
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_variable_initializer_untyped() async {
-    var library = await buildLibrary('var v = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static v @4
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_variable_late() async {
-    var library = await buildLibrary('late int x = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static late x @9
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_variable_late_final() async {
-    var library = await buildLibrary('late final int x;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static late final x @15
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set x= @-1
-          reference: <testLibraryFragment>::@setter::x
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _x @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_variable_late_final_initialized() async {
-    var library = await buildLibrary('late final int x = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static late final x @15
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_variable_propagatedType_const_noDep() async {
-    var library = await buildLibrary('const i = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const i @6
-          reference: <testLibraryFragment>::@topLevelVariable::i
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @10
-              staticType: int
-      accessors
-        synthetic static get i @-1
-          reference: <testLibraryFragment>::@getter::i
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_variable_propagatedType_final_dep_inLib() async {
-    addSource('$testPackageLibPath/a.dart', 'final a = 1;');
-    var library = await buildLibrary('import "a.dart"; final b = a / 2;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static final b @23
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: double
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: double
-''');
-  }
-
-  test_variable_propagatedType_final_dep_inPart() async {
-    addSource('$testPackageLibPath/a.dart', 'part of lib; final a = 1;');
-    var library =
-        await buildLibrary('library lib; part "a.dart"; final b = a / 2;');
-    checkElementText(library, r'''
-library
-  name: lib
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-      topLevelVariables
-        static final b @34
-          reference: <testLibraryFragment>::@topLevelVariable::b
-          enclosingElement: <testLibraryFragment>
-          type: double
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get b @-1
-          reference: <testLibraryFragment>::@getter::b
-          enclosingElement: <testLibraryFragment>
-          returnType: double
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static final a @19
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::a
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::a
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-''');
-  }
-
-  test_variable_propagatedType_final_noDep() async {
-    var library = await buildLibrary('final i = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static final i @6
-          reference: <testLibraryFragment>::@topLevelVariable::i
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get i @-1
-          reference: <testLibraryFragment>::@getter::i
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-''');
-  }
-
-  test_variable_propagatedType_implicit_dep() async {
-    // The propagated type is defined in a library that is not imported.
-    addSource('$testPackageLibPath/a.dart', 'class C {}');
-    addSource('$testPackageLibPath/b.dart', 'import "a.dart"; C f() => null;');
-    var library = await buildLibrary('import "b.dart"; final x = f();');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        static final x @23
-          reference: <testLibraryFragment>::@topLevelVariable::x
-          enclosingElement: <testLibraryFragment>
-          type: C
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get x @-1
-          reference: <testLibraryFragment>::@getter::x
-          enclosingElement: <testLibraryFragment>
-          returnType: C
-''');
-  }
-
-  test_variable_setterInPart_getterInPart() async {
-    addSource(
-        '$testPackageLibPath/a.dart', 'part of my.lib; void set x(int _) {}');
-    addSource('$testPackageLibPath/b.dart', 'part of my.lib; int get x => 42;');
-    var library =
-        await buildLibrary('library my.lib; part "a.dart"; part "b.dart";');
-    checkElementText(library, r'''
-library
-  name: my.lib
-  nameOffset: 8
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  parts
-    part_0
-    part_1
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      parts
-        part_0
-          uri: package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/a.dart
-        part_1
-          uri: package:test/b.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-          unit: <testLibrary>::@fragment::package:test/b.dart
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariable::x
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-      accessors
-        static set x= @25
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::x
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _ @31
-              type: int
-          returnType: void
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        synthetic static x @-1
-          reference: <testLibrary>::@fragment::package:test/b.dart::@topLevelVariable::x
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          type: int
-      accessors
-        static get x @24
-          reference: <testLibrary>::@fragment::package:test/b.dart::@getter::x
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          returnType: int
-''');
-  }
-
-  test_variable_type_inferred() async {
-    var library = await buildLibrary('var v = 0;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static v @4
-          reference: <testLibraryFragment>::@topLevelVariable::v
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get v @-1
-          reference: <testLibraryFragment>::@getter::v
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set v= @-1
-          reference: <testLibraryFragment>::@setter::v
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _v @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  test_variable_type_inferred_Never() async {
-    var library = await buildLibrary(r'''
-var a = throw 42;
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static a @4
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: Never
-          shouldUseTypeForInitializerInference: false
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: Never
-        synthetic static set a= @-1
-          reference: <testLibraryFragment>::@setter::a
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _a @-1
-              type: Never
-          returnType: void
-''');
-  }
-
-  test_variable_type_inferred_noInitializer() async {
-    var library = await buildLibrary(r'''
-var a;
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static a @4
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: dynamic
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: dynamic
-        synthetic static set a= @-1
-          reference: <testLibraryFragment>::@setter::a
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _a @-1
-              type: dynamic
-          returnType: void
-''');
-  }
-
-  test_variableInitializer_contextType_after_astRewrite() async {
-    var library = await buildLibrary(r'''
-class A<T> {
-  const A();
-}
-const A<int> a = A();
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @8
-              defaultType: dynamic
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-      topLevelVariables
-        static const a @41
-          reference: <testLibraryFragment>::@topLevelVariable::a
-          enclosingElement: <testLibraryFragment>
-          type: A<int>
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            InstanceCreationExpression
-              constructorName: ConstructorName
-                type: NamedType
-                  name: A @45
-                  element: <testLibraryFragment>::@class::A
-                  type: A<int>
-                staticElement: ConstructorMember
-                  base: <testLibraryFragment>::@class::A::@constructor::new
-                  substitution: {T: int}
-              argumentList: ArgumentList
-                leftParenthesis: ( @46
-                rightParenthesis: ) @47
-              staticType: A<int>
-      accessors
-        synthetic static get a @-1
-          reference: <testLibraryFragment>::@getter::a
-          enclosingElement: <testLibraryFragment>
-          returnType: A<int>
-''');
-  }
-
-  test_variables() async {
-    var library = await buildLibrary('int i; int j;');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static i @4
-          reference: <testLibraryFragment>::@topLevelVariable::i
-          enclosingElement: <testLibraryFragment>
-          type: int
-        static j @11
-          reference: <testLibraryFragment>::@topLevelVariable::j
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        synthetic static get i @-1
-          reference: <testLibraryFragment>::@getter::i
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set i= @-1
-          reference: <testLibraryFragment>::@setter::i
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _i @-1
-              type: int
-          returnType: void
-        synthetic static get j @-1
-          reference: <testLibraryFragment>::@getter::j
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set j= @-1
-          reference: <testLibraryFragment>::@setter::j
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _j @-1
-              type: int
-          returnType: void
-''');
-  }
-
-  void _assertTypeStr(DartType type, String expected) {
-    var typeStr = type.getDisplayString();
-    expect(typeStr, expected);
-  }
-
-  void _assertTypeStrings(List<DartType> types, List<String> expected) {
-    var typeStringList = types.map((e) {
-      return e.getDisplayString();
-    }).toList();
-    expect(typeStringList, expected);
-  }
-
-  Future<LibraryElementImpl> _buildDartFooLibrary(String content) async {
-    additionalMockSdkLibraries.add(
-      MockSdkLibrary('foo', [
-        MockSdkLibraryUnit('foo/foo.dart', content),
-      ]),
-    );
-
-    return await _libraryByUriFromTest('dart:foo');
-  }
-
-  Element _elementOfDefiningUnit(
-      LibraryElementImpl library, List<String> names) {
-    var reference = library.definingCompilationUnit.reference!;
-    for (var name in names) {
-      reference = reference.getChild(name);
-    }
-
-    var element = reference.element;
-    if (element != null) {
-      return element;
-    }
-
-    var elementFactory = library.linkedData!.elementFactory;
-    return elementFactory.elementOfReference(reference)!;
-  }
-
-  /// Returns the library for [uriStr] from the context of [testFile].
-  Future<LibraryElementImpl> _libraryByUriFromTest(String uriStr) async {
-    var analysisContext = contextFor(testFile);
-    var analysisSession = analysisContext.currentSession;
-
-    var libraryResult = await analysisSession.getLibraryByUri(uriStr);
-    libraryResult as LibraryElementResult;
-    return libraryResult.element as LibraryElementImpl;
-  }
-}
-
-@reflectiveTest
-class EnumAugmentationFromBytesTest extends ElementsBaseTest
-    with EnumAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => false;
-}
-
-@reflectiveTest
-class EnumAugmentationKeepLinkingTest extends ElementsBaseTest
-    with EnumAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => true;
-}
-
-mixin EnumAugmentationMixin on ElementsBaseTest {
-  test_add_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-enum A {
-  v;
-  void foo() {}
-}
-
-augment enum A {;
-  void bar() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        enum A @35
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @41
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::v
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-              returnType: List<A>
-          methods
-            foo @51
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@method::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-              returnType: void
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::values
-            constants
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::v
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::values
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@method::foo
-        augment enum A @76
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-          methods
-            bar @88
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmentationTarget() async {
-    newFile('$testPackageLibPath/a1.dart', r'''
-augment library 'test.dart';
-import augment 'a11.dart';
-import augment 'a12.dart';
-augment enum A {}
-''');
-
-    newFile('$testPackageLibPath/a11.dart', r'''
-augment library 'a1.dart';
-augment enum A {}
-''');
-
-    newFile('$testPackageLibPath/a12.dart', r'''
-augment library 'a1.dart';
-augment enum A {}
-''');
-
-    newFile('$testPackageLibPath/a2.dart', r'''
-augment library 'test.dart';
-import augment 'a21.dart';
-import augment 'a22.dart';
-augment enum A {}
-''');
-
-    newFile('$testPackageLibPath/a21.dart', r'''
-augment library 'a2.dart';
-augment enum A {}
-''');
-
-    newFile('$testPackageLibPath/a22.dart', r'''
-augment library 'a2.dart';
-augment enum A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a1.dart';
-import augment 'a2.dart';
-enum A {
-  v
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a1.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a1.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a1.dart
-      augmentationImports
-        package:test/a11.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
-          reference: <testLibrary>::@augmentation::package:test/a11.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a11.dart
-        package:test/a12.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
-          reference: <testLibrary>::@augmentation::package:test/a12.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a12.dart
-    package:test/a2.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a2.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a2.dart
-      augmentationImports
-        package:test/a21.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
-          reference: <testLibrary>::@augmentation::package:test/a21.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a21.dart
-        package:test/a22.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
-          reference: <testLibrary>::@augmentation::package:test/a22.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a22.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @57
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a1.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @63
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a1.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @96
-          reference: <testLibrary>::@fragment::package:test/a1.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a1.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/a11.dart::@enumAugmentation::A
-    <testLibrary>::@fragment::package:test/a11.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a11.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
-      enums
-        augment enum A @40
-          reference: <testLibrary>::@fragment::package:test/a11.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a11.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a1.dart::@enumAugmentation::A
-          augmentation: <testLibrary>::@fragment::package:test/a12.dart::@enumAugmentation::A
-    <testLibrary>::@fragment::package:test/a12.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a12.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
-      enums
-        augment enum A @40
-          reference: <testLibrary>::@fragment::package:test/a12.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a12.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a11.dart::@enumAugmentation::A
-          augmentation: <testLibrary>::@fragment::package:test/a2.dart::@enumAugmentation::A
-    <testLibrary>::@fragment::package:test/a2.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @96
-          reference: <testLibrary>::@fragment::package:test/a2.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a2.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a12.dart::@enumAugmentation::A
-          augmentation: <testLibrary>::@fragment::package:test/a21.dart::@enumAugmentation::A
-    <testLibrary>::@fragment::package:test/a21.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a21.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
-      enums
-        augment enum A @40
-          reference: <testLibrary>::@fragment::package:test/a21.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a21.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a2.dart::@enumAugmentation::A
-          augmentation: <testLibrary>::@fragment::package:test/a22.dart::@enumAugmentation::A
-    <testLibrary>::@fragment::package:test/a22.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a22.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
-      enums
-        augment enum A @40
-          reference: <testLibrary>::@fragment::package:test/a22.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a22.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a21.dart::@enumAugmentation::A
-  exportedReferences
-    declared <testLibraryFragment>::@enum::A
-  exportNamespace
-    A: <testLibraryFragment>::@enum::A
-''');
-  }
-
-  test_augmentationTarget_augmentationThenDeclaration() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment enum A {;
-  void foo1() {}
-}
-
-enum A {
-  v;
-  void foo2() {}
-}
-
-augment enum A {;
-  void foo3() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          fields
-            synthetic static const values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@field::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
-          accessors
-            synthetic static get values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@getter::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
-              returnType: List<A>
-          methods
-            foo1 @55
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@method::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
-              returnType: void
-        enum A @73
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
-          supertype: Enum
-          fields
-            static const enumConstant v @79
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::v
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-              returnType: List<A>
-          methods
-            foo2 @89
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enum::A::@method::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-              returnType: void
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::values
-            constants
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@field::v
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::v
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@getter::values
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@enum::A::@method::foo2
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1::@method::foo3
-        augment enum A @115
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enum::A
-          methods
-            foo3 @127
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1::@method::foo3
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
-              returnType: void
-''');
-  }
-
-  test_augmentationTarget_no2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment enum A {;
-  void foo1() {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment enum A {;
-  void foo2() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @67
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          fields
-            synthetic static const values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: List<A>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  rightBracket: ] @0
-                  staticType: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          accessors
-            synthetic static get values @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::values
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: List<A>
-          methods
-            foo1 @79
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: void
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::values
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::values
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::foo1
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@method::foo2
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      enums
-        augment enum A @39
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          methods
-            foo2 @51
-              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@method::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmented_constants_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {
-  v2
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v1
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v1 @36
-              reference: <testLibraryFragment>::@enum::A::@field::v1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v1 @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v1
-                      staticType: A
-                    SimpleIdentifier
-                      token: v2 @-1
-                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
-                      staticType: A
-                  rightBracket: ] @0
-                  staticType: List<A>
-              id: field_1
-              getter: getter_1
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v1 @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            static const enumConstant v2 @48
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_2
-              getter: getter_2
-          accessors
-            synthetic static get v2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: A
-              id: getter_2
-              variable: field_2
-''');
-  }
-
-  test_augmented_constants_add2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {
-  v2
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment enum A {
-  v3
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-enum A {
-  v1
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @55
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v1 @61
-              reference: <testLibraryFragment>::@enum::A::@field::v1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v1 @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v1
-                      staticType: A
-                    SimpleIdentifier
-                      token: v2 @-1
-                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
-                      staticType: A
-                    SimpleIdentifier
-                      token: v3 @-1
-                      staticElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getter::v3
-                      staticType: A
-                  rightBracket: ] @0
-                  staticType: List<A>
-              id: field_1
-              getter: getter_1
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v1 @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@field::v3
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@field::v3
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getter::v3
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          fields
-            static const enumConstant v2 @48
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_2
-              getter: getter_2
-          accessors
-            synthetic static get v2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: A
-              id: getter_2
-              variable: field_2
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          fields
-            static const enumConstant v3 @48
-              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@field::v3
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_3
-              getter: getter_3
-          accessors
-            synthetic static get v3 @-1
-              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getter::v3
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-              returnType: A
-              id: getter_3
-              variable: field_3
-''');
-  }
-
-  test_augmented_constants_add_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {
-  v2,
-  augment v2
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v1
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v1 @36
-              reference: <testLibraryFragment>::@enum::A::@field::v1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v1 @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v1
-                      staticType: A
-                    SimpleIdentifier
-                      token: v2 @-1
-                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
-                      staticType: A
-                  rightBracket: ] @0
-                  staticType: List<A>
-              id: field_1
-              getter: getter_1
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v1 @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            static const enumConstant v2 @48
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_2
-              getter: getter_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
-            augment static const enumConstant v2 @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_3
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::v2
-          accessors
-            synthetic static get v2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::v2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: A
-              id: getter_2
-              variable: field_2
-''');
-  }
-
-  test_augmented_constants_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {
-  augment v2
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v1, v2, v3
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v1 @36
-              reference: <testLibraryFragment>::@enum::A::@field::v1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_0
-              getter: getter_0
-            static const enumConstant v2 @40
-              reference: <testLibraryFragment>::@enum::A::@field::v2
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_1
-              getter: getter_1
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
-            static const enumConstant v3 @44
-              reference: <testLibraryFragment>::@enum::A::@field::v3
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_2
-              getter: getter_2
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v1 @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v1
-                      staticType: A
-                    SimpleIdentifier
-                      token: v2 @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v2
-                      staticType: A
-                    SimpleIdentifier
-                      token: v3 @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v3
-                      staticType: A
-                  rightBracket: ] @0
-                  staticType: List<A>
-              id: field_3
-              getter: getter_3
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v1 @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get v2 @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v2
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_1
-              variable: field_1
-            synthetic static get v3 @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v3
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_2
-              variable: field_2
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_3
-              variable: field_3
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
-              <testLibraryFragment>::@enum::A::@field::v3
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
-              <testLibraryFragment>::@enum::A::@field::v3
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v1
-              <testLibraryFragment>::@enum::A::@getter::v2
-              <testLibraryFragment>::@enum::A::@getter::v3
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            augment static const enumConstant v2 @56
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_4
-              augmentationTarget: <testLibraryFragment>::@enum::A::@field::v2
-''');
-  }
-
-  test_augmented_constants_augment_withArguments() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {
-  augment v1(3)
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v1(1), v2(2);
-  const A(int value);
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v1 @36
-              reference: <testLibraryFragment>::@enum::A::@field::v1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      IntegerLiteral
-                        literal: 1 @39
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_0
-              getter: getter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v1
-            static const enumConstant v2 @43
-              reference: <testLibraryFragment>::@enum::A::@field::v2
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      IntegerLiteral
-                        literal: 2 @46
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_1
-              getter: getter_1
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v1 @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v1
-                      staticType: A
-                    SimpleIdentifier
-                      token: v2 @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v2
-                      staticType: A
-                  rightBracket: ] @0
-                  staticType: List<A>
-              id: field_2
-              getter: getter_2
-          constructors
-            const @58
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-              parameters
-                requiredPositional value @64
-                  type: int
-          accessors
-            synthetic static get v1 @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get v2 @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v2
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_1
-              variable: field_1
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v1
-              <testLibraryFragment>::@enum::A::@field::v2
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v1
-              <testLibraryFragment>::@enum::A::@field::v2
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v1
-              <testLibraryFragment>::@enum::A::@getter::v2
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            augment static const enumConstant v1 @56
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    arguments
-                      IntegerLiteral
-                        literal: 3 @59
-                        staticType: int
-                    rightParenthesis: ) @0
-                  staticType: A
-              id: field_3
-              augmentationTarget: <testLibraryFragment>::@enum::A::@field::v1
-''');
-  }
-
-  test_augmented_constants_typeParameterCountMismatch() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A<T> {
-  augment v
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v, v2
-}
-''');
-
-    configuration
-      ..withConstructors = false
-      ..withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v
-            static const enumConstant v2 @39
-              reference: <testLibraryFragment>::@enum::A::@field::v2
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get v2 @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v2
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              FieldMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v
-                augmentationSubstitution: {T: InvalidType}
-              <testLibraryFragment>::@enum::A::@field::v2
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              FieldMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v
-                augmentationSubstitution: {T: InvalidType}
-              <testLibraryFragment>::@enum::A::@field::v2
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::v2
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T @44
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            augment static const enumConstant v @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              augmentationTarget: <testLibraryFragment>::@enum::A::@field::v
-''');
-  }
-
-  test_augmented_constructors_add_named() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  const A.named();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v.named();
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          constructors
-            const named @57
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              periodOffset: 56
-              nameEnd: 62
-''');
-  }
-
-  test_augmented_constructors_add_named_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A<T2> {;
-  const A.named(T2 a);
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A<T1> {
-  v<int>.named()
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @32
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @40
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A<int>
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A<dynamic>>
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A<int>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A<dynamic>>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              ConstructorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
-                augmentationSubstitution: {T2: T1}
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @44
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          constructors
-            const named @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              periodOffset: 60
-              nameEnd: 66
-              parameters
-                requiredPositional a @70
-                  type: T2
-''');
-  }
-
-  test_augmented_constructors_add_named_hasUnnamed() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  const A.named();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  const A();
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            const @47
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          constructors
-            const named @57
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              periodOffset: 56
-              nameEnd: 62
-''');
-  }
-
-  test_augmented_constructors_add_unnamed() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  const A();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          constructors
-            const @55
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-''');
-  }
-
-  test_augmented_constructors_add_unnamed_hasNamed() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  const A();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  const A.named();
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            const named @49
-              reference: <testLibraryFragment>::@enum::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@enum::A
-              periodOffset: 48
-              nameEnd: 54
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
-              <testLibraryFragment>::@enum::A::@constructor::named
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          constructors
-            const @55
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-''');
-  }
-
-  test_augmented_constructors_add_useFieldFormal() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  const A.named(this.f);
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v(0);
-  final int f;
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-            final f @54
-              reference: <testLibraryFragment>::@enum::A::@field::f
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::f
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::f
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::f
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          constructors
-            const named @57
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              periodOffset: 56
-              nameEnd: 62
-              parameters
-                requiredPositional final this.f @68
-                  type: int
-                  field: <testLibraryFragment>::@enum::A::@field::f
-''');
-  }
-
-  test_augmented_constructors_add_useFieldInitializer() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  const A.named() : f = 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  final int f;
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-            final f @51
-              reference: <testLibraryFragment>::@enum::A::@field::f
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-            synthetic get f @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::f
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::f
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::f
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          constructors
-            const named @57
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              periodOffset: 56
-              nameEnd: 62
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: f @67
-                    staticElement: <testLibraryFragment>::@enum::A::@field::f
-                    staticType: null
-                  equals: = @69
-                  expression: IntegerLiteral
-                    literal: 0 @71
-                    staticType: int
-''');
-  }
-
-  test_augmented_field_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment final int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  final int foo = 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            final foo @51
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              getter: getter_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            augment final foo @67
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_3
-              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment final int foo = 1;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment final int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-enum A {
-  v;
-  final int foo = 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @55
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @61
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            final foo @76
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              getter: getter_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          fields
-            augment final foo @67
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_3
-              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          fields
-            augment final foo @67
-              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_4
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-''');
-  }
-
-  test_augmented_field_augment_field_afterGetter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment int get foo => 1;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment final int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-enum A {
-  v;
-  final int foo = 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @55
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @61
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            final foo @76
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              getter: getter_2
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_3
-              variable: field_2
-              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          fields
-            augment final foo @67
-              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_3
-              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_afterSetter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment set foo(int _) {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment final int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-enum A {
-  v;
-  final int foo = 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @55
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @61
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            final foo @76
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              getter: getter_2
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::foo
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          accessors
-            augment set foo= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              parameters
-                requiredPositional _ @69
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: <null>
-              augmentationTargetAny: <testLibraryFragment>::@enum::A::@getter::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          fields
-            augment final foo @67
-              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_3
-              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_differentTypes() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment final double foo = 1.2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  final int foo = 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            final foo @51
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              getter: getter_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            augment final foo @70
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: double
-              shouldUseTypeForInitializerInference: true
-              id: field_3
-              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_functionExpression() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment final int Function() foo = () {
-    return augmented() + 1;
-  };
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  final int Function() foo = () {
-    return 0;
-  };
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v
-                      staticType: A
-                  rightBracket: ] @0
-                  staticType: List<A>
-            final foo @62
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int Function()
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                SimpleIdentifier
-                  token: _notSerializableExpression @-1
-                  staticElement: <null>
-                  staticType: null
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int Function()
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            augment final foo @78
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: int Function()
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                SimpleIdentifier
-                  token: _notSerializableExpression @-1
-                  staticElement: <null>
-                  staticType: null
-              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
-''');
-  }
-
-  /// This is not allowed by the specification, but allowed syntactically,
-  /// so we need a way to handle it.
-  test_augmented_field_augment_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment final int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  int get foo => 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              id: field_2
-              getter: getter_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            get foo @49
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            augment final foo @67
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_3
-              augmentationTarget: <testLibraryFragment>::@enum::A::@field::foo
-''');
-  }
-
-  test_augmented_fields_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  final int foo2 = 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  final int foo1 = 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            final foo1 @51
-              reference: <testLibraryFragment>::@enum::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              getter: getter_2
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            synthetic get foo1 @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            final foo2 @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_3
-              getter: getter_3
-          accessors
-            synthetic get foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_3
-              variable: field_3
-''');
-  }
-
-  test_augmented_fields_add_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A<T2> {;
-  final T2 foo2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A<T1> {
-  v<int>();
-  final T1 foo1;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @32
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @40
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A<int>
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A<dynamic>>
-              id: field_1
-              getter: getter_1
-            final foo1 @61
-              reference: <testLibraryFragment>::@enum::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: T1
-              id: field_2
-              getter: getter_2
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A<int>
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A<dynamic>>
-              id: getter_1
-              variable: field_1
-            synthetic get foo1 @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: T1
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo1
-              FieldMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
-                augmentationSubstitution: {T2: T1}
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::foo1
-              PropertyAccessorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
-                augmentationSubstitution: {T2: T1}
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @44
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            final foo2 @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: T2
-              id: field_3
-              getter: getter_3
-          accessors
-            synthetic get foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: T2
-              id: getter_3
-              variable: field_3
-''');
-  }
-
-  test_augmented_fields_add_useFieldFormal() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  final int foo;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v(0);
-  const A(this.foo);
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            const @50
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-              parameters
-                requiredPositional final this.foo @57
-                  type: int
-                  field: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            final foo @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: int
-          accessors
-            synthetic get foo @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-''');
-  }
-
-  test_augmented_fields_add_useFieldInitializer() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  final int foo;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  const A() : foo = 0;
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            const @47
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: foo @53
-                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
-                    staticType: null
-                  equals: = @57
-                  expression: IntegerLiteral
-                    literal: 0 @59
-                    staticType: int
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            final foo @59
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: int
-          accessors
-            synthetic get foo @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-''');
-  }
-
-  test_augmented_getters_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  int get foo2 => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  int get foo1 => 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@enum::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              id: field_2
-              getter: getter_2
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            get foo1 @49
-              reference: <testLibraryFragment>::@enum::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: int
-              id: field_3
-              getter: getter_3
-          accessors
-            get foo2 @57
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_3
-              variable: field_3
-''');
-  }
-
-  test_augmented_getters_add_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A<T2> {;
-  T2 get foo2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A<T1> {
-  v<int>();
-  T1 get foo1;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @32
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @40
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A<int>
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A<dynamic>>
-              id: field_1
-              getter: getter_1
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@enum::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: T1
-              id: field_2
-              getter: getter_2
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A<int>
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A<dynamic>>
-              id: getter_1
-              variable: field_1
-            abstract get foo1 @59
-              reference: <testLibraryFragment>::@enum::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: T1
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo1
-              FieldMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
-                augmentationSubstitution: {T2: T1}
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::foo1
-              PropertyAccessorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
-                augmentationSubstitution: {T2: T1}
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @44
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: T2
-              id: field_3
-              getter: getter_3
-          accessors
-            abstract get foo2 @60
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: T2
-              id: getter_3
-              variable: field_3
-''');
-  }
-
-  test_augmented_getters_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  final int foo = 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            final foo @51
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              getter: getter_2
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_3
-              variable: field_2
-              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo
-''');
-  }
-
-  test_augmented_getters_augment_field2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment int get foo => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-enum A {
-  v;
-  final int foo = 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @55
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @61
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            final foo @76
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              getter: getter_2
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_3
-              variable: field_2
-              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_4
-              variable: field_2
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-''');
-  }
-
-  test_augmented_getters_augment_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment int get foo1 => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  int get foo1 => 0;
-  int get foo2 => 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@enum::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              id: field_2
-              getter: getter_2
-            synthetic foo2 @-1
-              reference: <testLibraryFragment>::@enum::A::@field::foo2
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              id: field_3
-              getter: getter_3
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            get foo1 @49
-              reference: <testLibraryFragment>::@enum::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo1
-            get foo2 @70
-              reference: <testLibraryFragment>::@enum::A::@getter::foo2
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_3
-              variable: field_3
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo1
-              <testLibraryFragment>::@enum::A::@field::foo2
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo1
-              <testLibraryFragment>::@enum::A::@getter::foo2
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          accessors
-            augment get foo1 @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_4
-              variable: field_2
-              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo1
-''');
-  }
-
-  test_augmented_getters_augment_getter2_oneLib_oneTop() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment int get foo => 0;
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  int get foo => 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              id: field_2
-              getter: getter_2
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            get foo @49
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::0
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::1
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::0
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_3
-              variable: field_2
-              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::1
-            augment get foo @93
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_4
-              variable: field_2
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo::@def::0
-''');
-  }
-
-  test_augmented_getters_augment_getter2_twoLib() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment int get foo => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-enum A {
-  v;
-  int get foo => 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @55
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @61
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              id: field_2
-              getter: getter_2
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            get foo @74
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_3
-              variable: field_2
-              augmentationTarget: <testLibraryFragment>::@enum::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_4
-              variable: field_2
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-''');
-  }
-
-  test_augmented_getters_augment_nothing() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withConstructors = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: <null>
-''');
-  }
-
-  test_augmented_interfaces() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A implements I2 {}
-class I2 {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A implements I1 {
-  v
-}
-class I1 {}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I1 @60
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          interfaces
-            I1
-          fields
-            static const enumConstant v @50
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            interfaces
-              I1
-              I2
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class I2 @67
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          interfaces
-            I2
-''');
-  }
-
-  test_augmented_interfaces_chain() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment enum A implements I2 {}
-class I2 {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment enum A implements I3 {}
-class I3 {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A implements I1 {
-  v
-}
-class I1 {}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I1 @60
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          interfaces
-            I1
-          fields
-            static const enumConstant v @50
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            interfaces
-              I1
-              I2
-              I3
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class I2 @92
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-      enums
-        augment enum A @67
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          interfaces
-            I2
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        class I3 @64
-          reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::I3
-      enums
-        augment enum A @39
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          interfaces
-            I3
-''');
-  }
-
-  test_augmented_interfaces_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A<T2> implements I2<T2> {}
-class I2<E> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A<T> implements I1 {
-  v<int>()
-}
-class I1 {}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I1 @70
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @32
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          interfaces
-            I1
-          fields
-            static const enumConstant v @53
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A<int>
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A<int>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A<dynamic>>
-          augmented
-            interfaces
-              I1
-              I2<T>
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class I2 @75
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant E @78
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @44
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          interfaces
-            I2<T2>
-''');
-  }
-
-  test_augmented_interfaces_generic_mismatch() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A<T2, T3> implements I2<T2> {}
-class I2<E> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A<T> implements I1 {
-  v
-}
-class I1 {}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I1 @63
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @32
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          interfaces
-            I1
-          fields
-            static const enumConstant v @53
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A<dynamic>
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A<dynamic>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A<dynamic>>
-          augmented
-            interfaces
-              I1
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class I2 @79
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant E @82
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @44
-              defaultType: dynamic
-            covariant T3 @48
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          interfaces
-            I2<T2>
-''');
-  }
-
-  test_augmented_methods() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  void bar() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  void foo() {}
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          methods
-            foo @46
-              reference: <testLibraryFragment>::@enum::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: void
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
-              <testLibraryFragment>::@enum::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          methods
-            bar @54
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmented_methods_add_withDefaultValue() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  void foo([int x = 42]) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibraryFragment>::@enum::A::@constructor::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v
-                      staticType: A
-                  rightBracket: ] @0
-                  staticType: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          methods
-            foo @54
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              parameters
-                optionalPositional default x @63
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 42 @67
-                      staticType: int
-              returnType: void
-''');
-  }
-
-  test_augmented_methods_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment void foo1() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  void foo1() {}
-  void foo2() {}
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          methods
-            foo1 @46
-              reference: <testLibraryFragment>::@enum::A::@method::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo1
-            foo2 @63
-              reference: <testLibraryFragment>::@enum::A::@method::foo2
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: void
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo1
-              <testLibraryFragment>::@enum::A::@method::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          methods
-            augment foo1 @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@enum::A::@method::foo1
-''');
-  }
-
-  test_augmented_methods_augment2_oneLib_oneTop() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment void foo() {}
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  void foo() {}
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          methods
-            foo @46
-              reference: <testLibraryFragment>::@enum::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::0
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::1
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          methods
-            augment foo @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::0
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@enum::A::@method::foo
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::1
-            augment foo @86
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo::@def::0
-''');
-  }
-
-  test_augmented_methods_augment2_oneLib_twoTop() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment void foo() {}
-}
-augment enum A {;
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  void foo() {}
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          methods
-            foo @46
-              reference: <testLibraryFragment>::@enum::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@methodAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
-          methods
-            augment foo @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@enum::A::@method::foo
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1::@methodAugmentation::foo
-        augment enum A @86
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0
-          methods
-            augment foo @106
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::1
-              returnType: void
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@def::0::@methodAugmentation::foo
-''');
-  }
-
-  test_augmented_methods_augment2_twoLib() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment enum A {;
-  augment void foo() {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment enum A {;
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  void foo() {}
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          methods
-            foo @46
-              reference: <testLibraryFragment>::@enum::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-            methods
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @67
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          methods
-            augment foo @87
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@enum::A::@method::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      enums
-        augment enum A @39
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          methods
-            augment foo @59
-              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
-''');
-  }
-
-  test_augmented_methods_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A<T2> {;
-  T2 bar() => throw 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A<T> {
-  v<int>();
-  T foo() => throw 0;
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @32
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @39
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A<int>
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A<int>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A<dynamic>>
-          methods
-            foo @53
-              reference: <testLibraryFragment>::@enum::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: T
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-            methods
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
-                augmentationSubstitution: {T2: T}
-              <testLibraryFragment>::@enum::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @44
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          methods
-            bar @56
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: T2
-''');
-  }
-
-  test_augmented_methods_generic_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A<T2> {;
-  augment T2 foo() => throw 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A<T> {
-  v<int>();
-  T foo() => throw 0;
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @32
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @39
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A<int>
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A<int>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A<dynamic>>
-          methods
-            foo @53
-              reference: <testLibraryFragment>::@enum::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: T
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-            methods
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
-                augmentationSubstitution: {T2: T}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @44
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          methods
-            augment foo @64
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              returnType: T2
-              augmentationTarget: <testLibraryFragment>::@enum::A::@method::foo
-''');
-  }
-
-  test_augmented_mixins() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A with M2 {}
-mixin M2 {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A with M1 {
-  v
-}
-mixin M1 {}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          mixins
-            M1
-          fields
-            static const enumConstant v @44
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            mixins
-              M1
-              M2
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-      mixins
-        mixin M1 @54
-          reference: <testLibraryFragment>::@mixin::M1
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          mixins
-            M2
-      mixins
-        mixin M2 @61
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          superclassConstraints
-            Object
-''');
-  }
-
-  test_augmented_mixins_inferredTypeArguments() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A<T2> with M2 {}
-mixin M2<U2> on M1<U2> {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment enum A<T3> with M3 {}
-mixin M3<U3> on M2<U3> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-enum A<T1> with M1<T1> {
-  v<int>()
-}
-mixin M1<U1> {}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @55
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @57
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          mixins
-            M1<T1>
-          fields
-            static const enumConstant v @77
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A<int>
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A<dynamic>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A<int>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A<dynamic>>
-          augmented
-            mixins
-              M1<T1>
-              M2<T1>
-              M3<T1>
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-      mixins
-        mixin M1 @94
-          reference: <testLibraryFragment>::@mixin::M1
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant U1 @97
-              defaultType: dynamic
-          superclassConstraints
-            Object
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @44
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          mixins
-            M2<T2>
-      mixins
-        mixin M2 @65
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant U2 @68
-              defaultType: dynamic
-          superclassConstraints
-            M1<U2>
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          typeParameters
-            covariant T3 @44
-              defaultType: dynamic
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          mixins
-            M3<T3>
-      mixins
-        mixin M3 @65
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          typeParameters
-            covariant U3 @68
-              defaultType: dynamic
-          superclassConstraints
-            M2<U3>
-''');
-  }
-
-  test_augmented_setters_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  set foo2(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  set foo1(int _) {}
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@enum::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              id: field_2
-              setter: setter_0
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            set foo1= @45
-              reference: <testLibraryFragment>::@enum::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              parameters
-                requiredPositional _ @54
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_2
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@setter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setter::foo2
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              type: int
-              id: field_3
-              setter: setter_1
-          accessors
-            set foo2= @53
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              parameters
-                requiredPositional _ @62
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_3
-''');
-  }
-
-  test_augmented_setters_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment set foo(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  final int foo = 0;
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            final foo @51
-              reference: <testLibraryFragment>::@enum::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              getter: getter_2
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::foo
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          accessors
-            augment set foo= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              parameters
-                requiredPositional _ @69
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: <null>
-              augmentationTargetAny: <testLibraryFragment>::@enum::A::@getter::foo
-''');
-  }
-
-  test_augmented_setters_augment_nothing() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment set foo(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          accessors
-            augment set foo= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              parameters
-                requiredPositional _ @69
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: <null>
-''');
-  }
-
-  test_augmented_setters_augment_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment set foo1(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  set foo1(int _) {}
-  set foo2(int _) {}
-}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              id: field_0
-              getter: getter_0
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              id: field_1
-              getter: getter_1
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@enum::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              id: field_2
-              setter: setter_0
-            synthetic foo2 @-1
-              reference: <testLibraryFragment>::@enum::A::@field::foo2
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: int
-              id: field_3
-              setter: setter_1
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-              id: getter_0
-              variable: field_0
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-              id: getter_1
-              variable: field_1
-            set foo1= @45
-              reference: <testLibraryFragment>::@enum::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@enum::A
-              parameters
-                requiredPositional _ @54
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_2
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo1
-            set foo2= @66
-              reference: <testLibraryFragment>::@enum::A::@setter::foo2
-              enclosingElement: <testLibraryFragment>::@enum::A
-              parameters
-                requiredPositional _ @75
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_3
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::foo1
-              <testLibraryFragment>::@enum::A::@field::foo2
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo1
-              <testLibraryFragment>::@enum::A::@setter::foo2
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          accessors
-            augment set foo1= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@setterAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              parameters
-                requiredPositional _ @70
-                  type: int
-              returnType: void
-              id: setter_2
-              variable: field_2
-              augmentationTarget: <testLibraryFragment>::@enum::A::@setter::foo1
-''');
-  }
-
-  test_augmentedBy_class2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-
-enum A {v}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @56
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          supertype: Enum
-          fields
-            static const enumConstant v @59
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTargetAny: <testLibraryFragment>::@enum::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTargetAny: <testLibraryFragment>::@enum::A
-''');
-  }
-
-  test_augmentedBy_class_enum() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-
-augment enum A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-
-enum A {v}
-''');
-
-    configuration
-      ..withConstantInitializers = false
-      ..withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @56
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @59
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTargetAny: <testLibraryFragment>::@enum::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-''');
-  }
-
-  test_constructors_augment2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment const A.named();
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment const A.named();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-enum A {
-  v.named();
-  const A.named();
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @55
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @61
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-          constructors
-            const named @82
-              reference: <testLibraryFragment>::@enum::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@enum::A
-              periodOffset: 81
-              nameEnd: 87
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@constructorAugmentation::named
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          constructors
-            augment const named @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              periodOffset: 64
-              nameEnd: 70
-              augmentationTarget: <testLibraryFragment>::@enum::A::@constructor::named
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@constructorAugmentation::named
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          constructors
-            augment const named @65
-              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A::@constructorAugmentation::named
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
-              periodOffset: 64
-              nameEnd: 70
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
-''');
-  }
-
-  test_constructors_augment_named() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment const A.named();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v.named();
-  const A.named();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    period: . @0
-                    name: SimpleIdentifier
-                      token: named @-1
-                      staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
-                      staticType: null
-                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v
-                      staticType: A
-                  rightBracket: ] @0
-                  staticType: List<A>
-          constructors
-            const named @57
-              reference: <testLibraryFragment>::@enum::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@enum::A
-              periodOffset: 56
-              nameEnd: 62
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          constructors
-            augment const named @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              periodOffset: 64
-              nameEnd: 70
-              augmentationTarget: <testLibraryFragment>::@enum::A::@constructor::named
-''');
-  }
-
-  test_constructors_augment_unnamed() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A {;
-  augment const A();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A {
-  v;
-  const A();
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @36
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                InstanceCreationExpression
-                  constructorName: ConstructorName
-                    type: NamedType
-                      name: A @-1
-                      element: <testLibraryFragment>::@enum::A
-                      type: A
-                    staticElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::new
-                  argumentList: ArgumentList
-                    leftParenthesis: ( @0
-                    rightParenthesis: ) @0
-                  staticType: A
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A>
-              constantInitializer
-                ListLiteral
-                  leftBracket: [ @0
-                  elements
-                    SimpleIdentifier
-                      token: v @-1
-                      staticElement: <testLibraryFragment>::@enum::A::@getter::v
-                      staticType: A
-                  rightBracket: ] @0
-                  staticType: List<A>
-          constructors
-            const @47
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::new
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@enum::A
-          constructors
-            augment const @63
-              reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructorAugmentation::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-              augmentationTarget: <testLibraryFragment>::@enum::A::@constructor::new
-''');
-  }
-
-  test_inferTypes_method_ofAugment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-abstract class A {
-  int foo(String a);
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment enum B {;
-  foo(a) => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import 'a.dart';
-import augment 'b.dart';
-
-enum B implements A {
-  v
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      enums
-        enum B @48
-          reference: <testLibraryFragment>::@enum::B
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
-          supertype: Enum
-          interfaces
-            A
-          fields
-            static const enumConstant v @67
-              reference: <testLibraryFragment>::@enum::B::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::B
-              type: B
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::B::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::B
-              type: List<B>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::B
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::B::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::B
-              returnType: B
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::B::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::B
-              returnType: List<B>
-          augmented
-            interfaces
-              A
-            fields
-              <testLibraryFragment>::@enum::B::@field::v
-              <testLibraryFragment>::@enum::B::@field::values
-            constants
-              <testLibraryFragment>::@enum::B::@field::v
-            constructors
-              <testLibraryFragment>::@enum::B::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::B::@getter::v
-              <testLibraryFragment>::@enum::B::@getter::values
-            methods
-              <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B::@method::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum B @42
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@enum::B
-          methods
-            foo @49
-              reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B::@method::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
-              parameters
-                requiredPositional a @53
-                  type: String
-              returnType: int
-''');
-  }
-
-  test_inferTypes_method_usingAugmentation_interface() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  int foo(String a) => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-augment enum B implements A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-
-enum B {
-  v;
-  foo(a) => 0;
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum B @31
-          reference: <testLibraryFragment>::@enum::B
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
-          supertype: Enum
-          fields
-            static const enumConstant v @37
-              reference: <testLibraryFragment>::@enum::B::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::B
-              type: B
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::B::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::B
-              type: List<B>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::B
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::B::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::B
-              returnType: B
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::B::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::B
-              returnType: List<B>
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@enum::B::@method::foo
-              enclosingElement: <testLibraryFragment>::@enum::B
-              parameters
-                requiredPositional a @46
-                  type: String
-              returnType: int
-          augmented
-            interfaces
-              A
-            fields
-              <testLibraryFragment>::@enum::B::@field::v
-              <testLibraryFragment>::@enum::B::@field::values
-            constants
-              <testLibraryFragment>::@enum::B::@field::v
-            constructors
-              <testLibraryFragment>::@enum::B::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::B::@getter::v
-              <testLibraryFragment>::@enum::B::@getter::values
-            methods
-              <testLibraryFragment>::@enum::B::@method::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      enums
-        augment enum B @59
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@enum::B
-          interfaces
-            A
-''');
-  }
-
-  test_inferTypes_method_usingAugmentation_mixin() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-mixin A {
-  int foo(String a) => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-augment enum B with A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-
-enum B {
-  v;
-  foo(a) => 0;
-}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      enums
-        enum B @31
-          reference: <testLibraryFragment>::@enum::B
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
-          supertype: Enum
-          fields
-            static const enumConstant v @37
-              reference: <testLibraryFragment>::@enum::B::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::B
-              type: B
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::B::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::B
-              type: List<B>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::B
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::B::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::B
-              returnType: B
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::B::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::B
-              returnType: List<B>
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@enum::B::@method::foo
-              enclosingElement: <testLibraryFragment>::@enum::B
-              parameters
-                requiredPositional a @46
-                  type: String
-              returnType: int
-          augmented
-            mixins
-              A
-            fields
-              <testLibraryFragment>::@enum::B::@field::v
-              <testLibraryFragment>::@enum::B::@field::values
-            constants
-              <testLibraryFragment>::@enum::B::@field::v
-            constructors
-              <testLibraryFragment>::@enum::B::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::B::@getter::v
-              <testLibraryFragment>::@enum::B::@getter::values
-            methods
-              <testLibraryFragment>::@enum::B::@method::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      enums
-        augment enum B @59
-          reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@enum::B
-          mixins
-            A
-''');
-  }
-
-  test_typeParameters_defaultType() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment enum A<T extends B> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-enum A<T extends B> {
-  v
-}
-class B {}
-''');
-
-    configuration.withConstantInitializers = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @59
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-      enums
-        enum A @30
-          reference: <testLibraryFragment>::@enum::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @32
-              bound: B
-              defaultType: B
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          supertype: Enum
-          fields
-            static const enumConstant v @49
-              reference: <testLibraryFragment>::@enum::A::@field::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: A<B>
-              shouldUseTypeForInitializerInference: false
-            synthetic static const values @-1
-              reference: <testLibraryFragment>::@enum::A::@field::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              type: List<A<B>>
-          constructors
-            synthetic const @-1
-              reference: <testLibraryFragment>::@enum::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@enum::A
-          accessors
-            synthetic static get v @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::v
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: A<B>
-            synthetic static get values @-1
-              reference: <testLibraryFragment>::@enum::A::@getter::values
-              enclosingElement: <testLibraryFragment>::@enum::A
-              returnType: List<A<B>>
-          augmented
-            fields
-              <testLibraryFragment>::@enum::A::@field::v
-              <testLibraryFragment>::@enum::A::@field::values
-            constants
-              <testLibraryFragment>::@enum::A::@field::v
-            constructors
-              <testLibraryFragment>::@enum::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@enum::A::@getter::v
-              <testLibraryFragment>::@enum::A::@getter::values
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      enums
-        augment enum A @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T @44
-              bound: B
-              defaultType: B
-          augmentationTarget: <testLibraryFragment>::@enum::A
-''');
-  }
-}
-
-@reflectiveTest
-class ExtensionAugmentationFromBytesTest extends ElementsBaseTest
-    with ExtensionAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => false;
-}
-
-@reflectiveTest
-class ExtensionAugmentationKeepLinkingTest extends ElementsBaseTest
-    with ExtensionAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => true;
-}
-
-mixin ExtensionAugmentationMixin on ElementsBaseTest {
-  test_augmentationTarget() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment extension A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment extension A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {}
-''');
-
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          augmented
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @72
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      extensions
-        augment A @44
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-  exportedReferences
-    declared <testLibraryFragment>::@extension::A
-  exportNamespace
-    A: <testLibraryFragment>::@extension::A
-''');
-  }
-
-  test_augmentationTarget_no2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment extension A {
-  void foo1() {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment extension A {
-  void foo2() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @72
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          extendedType: InvalidType
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          methods
-            foo1 @83
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: void
-          augmented
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::foo1
-              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@method::foo2
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      extensions
-        augment A @44
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          methods
-            foo2 @55
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@method::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmented_field_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            static foo @59
-              reference: <testLibraryFragment>::@extension::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extension::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extension::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibraryFragment>::@extension::A::@getter::foo
-              <testLibraryFragment>::@extension::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          fields
-            augment static foo @72
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static int foo = 1;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-extension A on int {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @60
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            static foo @84
-              reference: <testLibraryFragment>::@extension::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extension::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extension::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibraryFragment>::@extension::A::@getter::foo
-              <testLibraryFragment>::@extension::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          fields
-            augment static foo @72
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            augment static foo @72
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-''');
-  }
-
-  test_augmented_field_augment_field_afterGetter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static int get foo => 1;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-extension A on int {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @60
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            static foo @84
-              reference: <testLibraryFragment>::@extension::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extension::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extension::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@extension::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          accessors
-            augment static get foo @76
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@extension::A::@getter::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            augment static foo @72
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_afterSetter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static set foo(int _) {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-extension A on int {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @60
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            static foo @84
-              reference: <testLibraryFragment>::@extension::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extension::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extension::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibraryFragment>::@extension::A::@getter::foo
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          accessors
-            augment static set foo= @72
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              parameters
-                requiredPositional _ @80
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@extension::A::@setter::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            augment static foo @72
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_differentTypes() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static double foo = 1.2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            static foo @59
-              reference: <testLibraryFragment>::@extension::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extension::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extension::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibraryFragment>::@extension::A::@getter::foo
-              <testLibraryFragment>::@extension::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          fields
-            augment static foo @75
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              type: double
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
-''');
-  }
-
-  /// This is not allowed by the specification, but allowed syntactically,
-  /// so we need a way to handle it.
-  test_augmented_field_augment_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  static int get foo => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            synthetic static foo @-1
-              reference: <testLibraryFragment>::@extension::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              id: field_0
-              getter: getter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-          accessors
-            static get foo @63
-              reference: <testLibraryFragment>::@extension::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibraryFragment>::@extension::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          fields
-            augment static foo @72
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@extension::A::@field::foo
-''');
-  }
-
-  test_augmented_fields_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  static int foo2 = 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  static int foo1 = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            static foo1 @59
-              reference: <testLibraryFragment>::@extension::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          accessors
-            synthetic static get foo1 @-1
-              reference: <testLibraryFragment>::@extension::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static set foo1= @-1
-              reference: <testLibraryFragment>::@extension::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _foo1 @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@extension::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
-            accessors
-              <testLibraryFragment>::@extension::A::@getter::foo1
-              <testLibraryFragment>::@extension::A::@setter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          fields
-            static foo2 @64
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_1
-          accessors
-            synthetic static get foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-            synthetic static set foo2= @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              parameters
-                requiredPositional _foo2 @-1
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_getters_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  int get foo2 => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  int get foo1 => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@extension::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              id: field_0
-              getter: getter_0
-          accessors
-            get foo1 @56
-              reference: <testLibraryFragment>::@extension::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@extension::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
-            accessors
-              <testLibraryFragment>::@extension::A::@getter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              type: int
-              id: field_1
-              getter: getter_1
-          accessors
-            get foo2 @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_getters_add_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A<T2> {
-  T2 get foo2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A<T1> on int {
-  T1 get foo1;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @37
-              defaultType: dynamic
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@extension::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: T1
-              id: field_0
-              getter: getter_0
-          accessors
-            abstract get foo1 @59
-              reference: <testLibraryFragment>::@extension::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: T1
-              id: getter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@extension::A::@field::foo1
-              FieldMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
-                augmentationSubstitution: {T2: T1}
-            accessors
-              <testLibraryFragment>::@extension::A::@getter::foo1
-              PropertyAccessorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
-                augmentationSubstitution: {T2: T1}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @49
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              type: T2
-              id: field_1
-              getter: getter_1
-          accessors
-            abstract get foo2 @64
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: T2
-              id: getter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_getters_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            static foo @59
-              reference: <testLibraryFragment>::@extension::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extension::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extension::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@extension::A::@field::foo
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@extension::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          accessors
-            augment static get foo @76
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@extension::A::@getter::foo
-''');
-  }
-
-  test_augmented_getters_augment_field2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static int get foo => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-extension A on int {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @60
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            static foo @84
-              reference: <testLibraryFragment>::@extension::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extension::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extension::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@extension::A::@field::foo
-            accessors
-              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@extension::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          accessors
-            augment static get foo @76
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@extension::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          accessors
-            augment static get foo @76
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_0
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-''');
-  }
-
-  test_augmented_getters_augment_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment int get foo1 => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  int get foo1 => 0;
-  int get foo2 => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@extension::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              id: field_0
-              getter: getter_0
-            synthetic foo2 @-1
-              reference: <testLibraryFragment>::@extension::A::@field::foo2
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              id: field_1
-              getter: getter_1
-          accessors
-            get foo1 @56
-              reference: <testLibraryFragment>::@extension::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo1
-            get foo2 @77
-              reference: <testLibraryFragment>::@extension::A::@getter::foo2
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@extension::A::@field::foo1
-              <testLibraryFragment>::@extension::A::@field::foo2
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo1
-              <testLibraryFragment>::@extension::A::@getter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          accessors
-            augment get foo1 @69
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@extension::A::@getter::foo1
-''');
-  }
-
-  test_augmented_getters_augment_getter2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment int get foo => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-extension A on int {
-  int get foo => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @60
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@extension::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              id: field_0
-              getter: getter_0
-          accessors
-            get foo @81
-              reference: <testLibraryFragment>::@extension::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@extension::A::@field::foo
-            accessors
-              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          accessors
-            augment get foo @69
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@extension::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          accessors
-            augment get foo @69
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_0
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@getterAugmentation::foo
-''');
-  }
-
-  test_augmented_methods() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  void bar() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          methods
-            foo @53
-              reference: <testLibraryFragment>::@extension::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: void
-          augmented
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::bar
-              <testLibraryFragment>::@extension::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          methods
-            bar @58
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmented_methods_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment void foo1() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  void foo1() {}
-  void foo2() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          methods
-            foo1 @53
-              reference: <testLibraryFragment>::@extension::A::@method::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo1
-            foo2 @70
-              reference: <testLibraryFragment>::@extension::A::@method::foo2
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: void
-          augmented
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo1
-              <testLibraryFragment>::@extension::A::@method::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          methods
-            augment foo1 @66
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@extension::A::@method::foo1
-''');
-  }
-
-  test_augmented_methods_augment2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment extension A {
-  augment void foo() {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment extension A {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          methods
-            foo @53
-              reference: <testLibraryFragment>::@extension::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
-          augmented
-            methods
-              <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @72
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          methods
-            augment foo @91
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@extension::A::@method::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      extensions
-        augment A @44
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          methods
-            augment foo @63
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
-''');
-  }
-
-  test_augmented_methods_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A<T2> {
-  T2 bar() => throw 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A<T> on int {
-  T foo() => throw 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @37
-              defaultType: dynamic
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          methods
-            foo @53
-              reference: <testLibraryFragment>::@extension::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: T
-          augmented
-            methods
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::bar
-                augmentationSubstitution: {T2: T}
-              <testLibraryFragment>::@extension::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @49
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          methods
-            bar @60
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: T2
-''');
-  }
-
-  test_augmented_methods_generic_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A<T2> {
-  augment T2 foo() => throw 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A<T> on int {
-  T foo() => throw 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @37
-              defaultType: dynamic
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          methods
-            foo @53
-              reference: <testLibraryFragment>::@extension::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: T
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
-          augmented
-            methods
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
-                augmentationSubstitution: {T2: T}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @49
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          methods
-            augment foo @68
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: T2
-              augmentationTarget: <testLibraryFragment>::@extension::A::@method::foo
-''');
-  }
-
-  test_augmented_methods_typeParameterCountMismatch() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A<T> {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  void foo() {}
-  void bar() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          methods
-            foo @53
-              reference: <testLibraryFragment>::@extension::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
-            bar @69
-              reference: <testLibraryFragment>::@extension::A::@method::bar
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: void
-          augmented
-            methods
-              <testLibraryFragment>::@extension::A::@method::bar
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
-                augmentationSubstitution: {T: InvalidType}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T @49
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          methods
-            augment foo @69
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@extension::A::@method::foo
-''');
-  }
-
-  test_augmented_setters_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  set foo2(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  set foo1(int _) {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@extension::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              id: field_0
-              setter: setter_0
-          accessors
-            set foo1= @52
-              reference: <testLibraryFragment>::@extension::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _ @61
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            fields
-              <testLibraryFragment>::@extension::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
-            accessors
-              <testLibraryFragment>::@extension::A::@setter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              type: int
-              id: field_1
-              setter: setter_1
-          accessors
-            set foo2= @57
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              parameters
-                requiredPositional _ @66
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_setters_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment static set foo(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            static foo @59
-              reference: <testLibraryFragment>::@extension::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          accessors
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extension::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extension::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@extension::A::@field::foo
-            accessors
-              <testLibraryFragment>::@extension::A::@getter::foo
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          accessors
-            augment static set foo= @72
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              parameters
-                requiredPositional _ @80
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@extension::A::@setter::foo
-''');
-  }
-
-  test_augmented_setters_augment_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension A {
-  augment set foo1(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension A on int {
-  set foo1(int _) {}
-  set foo2(int _) {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @35
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@extension::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              id: field_0
-              setter: setter_0
-            synthetic foo2 @-1
-              reference: <testLibraryFragment>::@extension::A::@field::foo2
-              enclosingElement: <testLibraryFragment>::@extension::A
-              type: int
-              id: field_1
-              setter: setter_1
-          accessors
-            set foo1= @52
-              reference: <testLibraryFragment>::@extension::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _ @61
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo1
-            set foo2= @73
-              reference: <testLibraryFragment>::@extension::A::@setter::foo2
-              enclosingElement: <testLibraryFragment>::@extension::A
-              parameters
-                requiredPositional _ @82
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@extension::A::@field::foo1
-              <testLibraryFragment>::@extension::A::@field::foo2
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo1
-              <testLibraryFragment>::@extension::A::@setter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-          accessors
-            augment set foo1= @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@setterAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
-              parameters
-                requiredPositional _ @74
-                  type: int
-              returnType: void
-              id: setter_2
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@extension::A::@setter::foo1
-''');
-  }
-
-  test_augmentedBy_class2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-
-extension A on int {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @61
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTargetAny: <testLibraryFragment>::@extension::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTargetAny: <testLibraryFragment>::@extension::A
-''');
-  }
-
-  test_augmentedBy_class_extension() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-
-augment extension A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-
-extension A on int {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensions
-        A @61
-          reference: <testLibraryFragment>::@extension::A
-          enclosingElement: <testLibraryFragment>
-          extendedType: int
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          augmented
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTargetAny: <testLibraryFragment>::@extension::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensions
-        augment A @48
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@extension::A
-''');
-  }
-}
-
-@reflectiveTest
-class ExtensionTypeAugmentationFromBytesTest extends ElementsBaseTest
-    with ExtensionTypeAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => false;
-}
-
-@reflectiveTest
-class ExtensionTypeAugmentationKeepLinkingTest extends ElementsBaseTest
-    with ExtensionTypeAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => true;
-}
-
-mixin ExtensionTypeAugmentationMixin on ElementsBaseTest {
-  test_augmentationTarget() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment extension type A(int it) {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment extension type A(int it) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {}
-''');
-
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @77
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      extensionTypes
-        augment A @49
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-  exportedReferences
-    declared <testLibraryFragment>::@extensionType::A
-  exportNamespace
-    A: <testLibraryFragment>::@extensionType::A
-''');
-  }
-
-  test_augmentationTarget_no2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment extension type A(int it) {
-  void foo1() {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment extension type A(int it) {
-  void foo2() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @77
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          representation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
-          primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructorAugmentation::new
-          typeErasure: int
-          fields
-            final it @83
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              type: int
-          constructors
-            augment @77
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructorAugmentation::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              parameters
-                requiredPositional final this.it @83
-                  type: int
-                  field: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::it
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: int
-          methods
-            foo1 @96
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: void
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::it
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructorAugmentation::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::it
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::foo1
-              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@method::foo2
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      extensionTypes
-        augment A @49
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          methods
-            foo2 @68
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@method::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmented_constructors_add_named() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  A.named();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          constructors
-            named @68
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              periodOffset: 67
-              nameEnd: 73
-''');
-  }
-
-  test_augmented_constructors_add_named_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A<T2>(int it) {
-  A.named(T2 a);
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A<T1>(int it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @42
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @50
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @50
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-              ConstructorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
-                augmentationSubstitution: {T2: T1}
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @54
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          constructors
-            named @72
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              periodOffset: 71
-              nameEnd: 77
-              parameters
-                requiredPositional a @81
-                  type: T2
-''');
-  }
-
-  test_augmented_constructors_add_unnamed_hasNamed() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  A();
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A.named(int it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::named
-          typeErasure: int
-          fields
-            final it @52
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            named @42
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              periodOffset: 41
-              nameEnd: 47
-              parameters
-                requiredPositional final this.it @52
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::new
-              <testLibraryFragment>::@extensionType::A::@constructor::named
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          constructors
-            @66
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-''');
-  }
-
-  test_augmented_field_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            static foo @65
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_1
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::foo
-              <testLibraryFragment>::@extensionType::A::@setter::foo
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          fields
-            augment static foo @85
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static int foo = 1;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-extension type A(int it) {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @65
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @71
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            static foo @90
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-          constructors
-            @65
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @71
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_1
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::foo
-              <testLibraryFragment>::@extensionType::A::@setter::foo
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          fields
-            augment static foo @85
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          fields
-            augment static foo @85
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_3
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-''');
-  }
-
-  test_augmented_field_augment_field_afterGetter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static int get foo => 1;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-extension type A(int it) {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @65
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @71
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            static foo @90
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-          constructors
-            @65
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @71
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_1
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@setter::foo
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          accessors
-            augment static get foo @89
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_1
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          fields
-            augment static foo @85
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_afterSetter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static set foo(int _) {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-extension type A(int it) {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @65
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @71
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            static foo @90
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-          constructors
-            @65
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @71
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_1
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::foo
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          accessors
-            augment static set foo= @85
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              parameters
-                requiredPositional _ @93
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@setter::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          fields
-            augment static foo @85
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_differentTypes() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static double foo = 1.2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            static foo @65
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_1
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::foo
-              <testLibraryFragment>::@extensionType::A::@setter::foo
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          fields
-            augment static foo @88
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              type: double
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
-''');
-  }
-
-  /// This is not allowed by the specification, but allowed syntactically,
-  /// so we need a way to handle it.
-  test_augmented_field_augment_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  static int get foo => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            synthetic static foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_1
-              getter: getter_1
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            static get foo @69
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::foo
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          fields
-            augment static foo @85
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@field::foo
-''');
-  }
-
-  test_augmented_fields_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  static int foo2 = 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  static int foo1 = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            static foo1 @65
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_0
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static get foo1 @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-            synthetic static set foo1= @-1
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _foo1 @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::foo1
-              <testLibraryFragment>::@extensionType::A::@setter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          fields
-            static foo2 @77
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              getter: getter_2
-              setter: setter_1
-          accessors
-            synthetic static get foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-            synthetic static set foo2= @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              parameters
-                requiredPositional _foo2 @-1
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_2
-''');
-  }
-
-  test_augmented_getters_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  int get foo2 => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  int get foo1 => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_1
-              getter: getter_1
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            get foo1 @62
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              type: int
-              id: field_2
-              getter: getter_2
-          accessors
-            get foo2 @74
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-''');
-  }
-
-  test_augmented_getters_add_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A<T2>(int it) {
-  T2 get foo2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A<T1>(int it) {
-  T1 get foo1;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @42
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @50
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: T1
-              id: field_1
-              getter: getter_1
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @50
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            abstract get foo1 @65
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: T1
-              id: getter_1
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::foo1
-              FieldMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
-                augmentationSubstitution: {T2: T1}
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::foo1
-              PropertyAccessorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
-                augmentationSubstitution: {T2: T1}
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @54
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              type: T2
-              id: field_2
-              getter: getter_2
-          accessors
-            abstract get foo2 @77
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: T2
-              id: getter_2
-              variable: field_2
-''');
-  }
-
-  test_augmented_getters_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            static foo @65
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_0
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::foo
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@setter::foo
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          accessors
-            augment static get foo @89
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_1
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
-''');
-  }
-
-  test_augmented_getters_augment_field2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static int get foo => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-extension type A(int it) {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @65
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @71
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            static foo @90
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_0
-          constructors
-            @65
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @71
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::foo
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@setter::foo
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          accessors
-            augment static get foo @89
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_1
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          accessors
-            augment static get foo @89
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-              returnType: int
-              id: getter_3
-              variable: field_1
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-''');
-  }
-
-  test_augmented_getters_augment_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment int get foo1 => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  int get foo1 => 0;
-  int get foo2 => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_1
-              getter: getter_1
-            synthetic foo2 @-1
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo2
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_2
-              getter: getter_2
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            get foo1 @62
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo1
-            get foo2 @83
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo2
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_2
-              variable: field_2
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::foo1
-              <testLibraryFragment>::@extensionType::A::@field::foo2
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo1
-              <testLibraryFragment>::@extensionType::A::@getter::foo2
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          accessors
-            augment get foo1 @82
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: int
-              id: getter_3
-              variable: field_1
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo1
-''');
-  }
-
-  test_augmented_getters_augment_getter2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment int get foo => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-extension type A(int it) {
-  int get foo => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @65
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @71
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_1
-              getter: getter_1
-          constructors
-            @65
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @71
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            get foo @87
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::foo
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          accessors
-            augment get foo @82
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_1
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          accessors
-            augment get foo @82
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-              returnType: int
-              id: getter_3
-              variable: field_1
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@getterAugmentation::foo
-''');
-  }
-
-  test_augmented_interfaces() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) implements I2 {}
-extension type I2(int it) {}
-''');
-
-    configuration.withConstructors = false;
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) implements I1 {}
-extension type I1(int it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          interfaces
-            I1
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          augmented
-            interfaces
-              I1
-              I2
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-        I1 @82
-          reference: <testLibraryFragment>::@extensionType::I1
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::I1::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
-          typeErasure: int
-          fields
-            final it @89
-              reference: <testLibraryFragment>::@extensionType::I1::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::I1
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::I1::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::I1
-              returnType: int
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          interfaces
-            I2
-        I2 @94
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
-          primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
-          typeErasure: int
-          fields
-            final it @101
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-              returnType: int
-''');
-  }
-
-  test_augmented_interfaces_chain() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment extension type A(int it) implements I2 {}
-extension type I2(int it) {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment extension type A(int it) implements I3 {}
-extension type I3(int it) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) implements I1 {}
-extension type I1(int it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          interfaces
-            I1
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          augmented
-            interfaces
-              I1
-              I2
-              I3
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-        I1 @82
-          reference: <testLibraryFragment>::@extensionType::I1
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::I1::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
-          typeErasure: int
-          fields
-            final it @89
-              reference: <testLibraryFragment>::@extensionType::I1::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::I1
-              type: int
-          constructors
-            @82
-              reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::I1
-              parameters
-                requiredPositional final this.it @89
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::I1::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::I1::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::I1
-              returnType: int
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @77
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          interfaces
-            I2
-        I2 @119
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
-          primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
-          typeErasure: int
-          fields
-            final it @126
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-              type: int
-          constructors
-            @119
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-              parameters
-                requiredPositional final this.it @126
-                  type: int
-                  field: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-              returnType: int
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      extensionTypes
-        augment A @49
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          interfaces
-            I3
-        I3 @91
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          representation: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@field::it
-          primaryConstructor: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@constructor::new
-          typeErasure: int
-          fields
-            final it @98
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@field::it
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
-              type: int
-          constructors
-            @91
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
-              parameters
-                requiredPositional final this.it @98
-                  type: int
-                  field: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3::@getter::it
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionType::I3
-              returnType: int
-''');
-  }
-
-  test_augmented_interfaces_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A<T2>(int it) implements I2<T2> {}
-extension type I2<E>(int it) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A<T>(int it) implements I1 {}
-extension type I1(int it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @42
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          interfaces
-            I1
-          fields
-            final it @49
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @49
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          augmented
-            interfaces
-              I1
-              I2<T>
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-        I1 @85
-          reference: <testLibraryFragment>::@extensionType::I1
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::I1::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
-          typeErasure: int
-          fields
-            final it @92
-              reference: <testLibraryFragment>::@extensionType::I1::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::I1
-              type: int
-          constructors
-            @85
-              reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::I1
-              parameters
-                requiredPositional final this.it @92
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::I1::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::I1::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::I1
-              returnType: int
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @54
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          interfaces
-            I2<T2>
-        I2 @102
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant E @105
-              defaultType: dynamic
-          representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
-          primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
-          typeErasure: int
-          fields
-            final it @112
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-              type: int
-          constructors
-            @102
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-              parameters
-                requiredPositional final this.it @112
-                  type: int
-                  field: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-              returnType: int
-''');
-  }
-
-  test_augmented_interfaces_generic_mismatch() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A<T2, T3>(int it) implements I2<T2> {}
-extension type I2<E>(int it) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A<T>(int it) implements I1 {}
-extension type I1(int it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @42
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          interfaces
-            I1
-          fields
-            final it @49
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @49
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          augmented
-            interfaces
-              I1
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-        I1 @85
-          reference: <testLibraryFragment>::@extensionType::I1
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::I1::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::I1::@constructor::new
-          typeErasure: int
-          fields
-            final it @92
-              reference: <testLibraryFragment>::@extensionType::I1::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::I1
-              type: int
-          constructors
-            @85
-              reference: <testLibraryFragment>::@extensionType::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::I1
-              parameters
-                requiredPositional final this.it @92
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::I1::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::I1::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::I1
-              returnType: int
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @54
-              defaultType: dynamic
-            covariant T3 @58
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          interfaces
-            I2<T2>
-        I2 @106
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant E @109
-              defaultType: dynamic
-          representation: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
-          primaryConstructor: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
-          typeErasure: int
-          fields
-            final it @116
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-              type: int
-          constructors
-            @106
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-              parameters
-                requiredPositional final this.it @116
-                  type: int
-                  field: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@getter::it
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
-              returnType: int
-''');
-  }
-
-  test_augmented_methods() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  void bar() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          methods
-            foo @59
-              reference: <testLibraryFragment>::@extensionType::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: void
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
-              <testLibraryFragment>::@extensionType::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          methods
-            bar @71
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmented_methods_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment void foo1() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  void foo1() {}
-  void foo2() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          methods
-            foo1 @59
-              reference: <testLibraryFragment>::@extensionType::A::@method::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo1
-            foo2 @76
-              reference: <testLibraryFragment>::@extensionType::A::@method::foo2
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: void
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo1
-              <testLibraryFragment>::@extensionType::A::@method::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          methods
-            augment foo1 @79
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo1
-''');
-  }
-
-  test_augmented_methods_augment2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment extension type A(int it) {
-  augment void foo() {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment extension type A(int it) {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          methods
-            foo @59
-              reference: <testLibraryFragment>::@extensionType::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-            methods
-              <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @77
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          methods
-            augment foo @104
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      extensionTypes
-        augment A @49
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          methods
-            augment foo @76
-              reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-''');
-  }
-
-  test_augmented_methods_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A<T2>(int it) {
-  T2 bar() => throw 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A<T>(int it) {
-  T foo() => throw 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @42
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @49
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @49
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          methods
-            foo @59
-              reference: <testLibraryFragment>::@extensionType::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: T
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-            methods
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
-                augmentationSubstitution: {T2: T}
-              <testLibraryFragment>::@extensionType::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @54
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          methods
-            bar @73
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: T2
-''');
-  }
-
-  test_augmented_methods_generic_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A<T2>(int it) {
-  augment T2 foo() => throw 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A<T>(int it) {
-  T foo() => throw 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @42
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @49
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @49
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          methods
-            foo @59
-              reference: <testLibraryFragment>::@extensionType::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: T
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-            methods
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-                augmentationSubstitution: {T2: T}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @54
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          methods
-            augment foo @81
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: T2
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo
-''');
-  }
-
-  test_augmented_methods_typeParameterCountMismatch() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A<T>(int it) {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  void foo() {}
-  void bar() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          methods
-            foo @59
-              reference: <testLibraryFragment>::@extensionType::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-            bar @75
-              reference: <testLibraryFragment>::@extensionType::A::@method::bar
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: void
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-            methods
-              <testLibraryFragment>::@extensionType::A::@method::bar
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-                augmentationSubstitution: {T: InvalidType}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T @54
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          methods
-            augment foo @82
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@method::foo
-''');
-  }
-
-  test_augmented_setters_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  set foo2(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  set foo1(int _) {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_1
-              setter: setter_0
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            set foo1= @58
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _ @67
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_1
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@setter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              type: int
-              id: field_2
-              setter: setter_1
-          accessors
-            set foo2= @70
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              parameters
-                requiredPositional _ @79
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_2
-''');
-  }
-
-  test_augmented_setters_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment static set foo(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  static int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            static foo @65
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_0
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-            synthetic static set foo= @-1
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_1
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::foo
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::foo
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          accessors
-            augment static set foo= @85
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              parameters
-                requiredPositional _ @93
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@setter::foo
-''');
-  }
-
-  test_augmented_setters_augment_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment extension type A(int it) {
-  augment set foo1(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-extension type A(int it) {
-  set foo1(int _) {}
-  set foo2(int _) {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @40
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_0
-              getter: getter_0
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_1
-              setter: setter_0
-            synthetic foo2 @-1
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo2
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              id: field_2
-              setter: setter_1
-          constructors
-            @40
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            set foo1= @58
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _ @67
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_1
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo1
-            set foo2= @79
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo2
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _ @88
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_2
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::foo1
-              <testLibraryFragment>::@extensionType::A::@field::foo2
-              <testLibraryFragment>::@extensionType::A::@field::it
-            constructors
-              <testLibraryFragment>::@extensionType::A::@constructor::new
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo1
-              <testLibraryFragment>::@extensionType::A::@setter::foo2
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @52
-          reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-          accessors
-            augment set foo1= @78
-              reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@setterAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
-              parameters
-                requiredPositional _ @87
-                  type: int
-              returnType: void
-              id: setter_2
-              variable: field_1
-              augmentationTarget: <testLibraryFragment>::@extensionType::A::@setter::foo1
-''');
-  }
-
-  test_augmentedBy_class2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-
-extension type A(int it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @66
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @72
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTargetAny: <testLibraryFragment>::@extensionType::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTargetAny: <testLibraryFragment>::@extensionType::A
-''');
-  }
-
-  test_augmentedBy_class_extensionType() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-
-augment extension type A(int it) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-
-extension type A(int it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @66
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @72
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          augmented
-            fields
-              <testLibraryFragment>::@extensionType::A::@field::it
-            accessors
-              <testLibraryFragment>::@extensionType::A::@getter::it
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTargetAny: <testLibraryFragment>::@extensionType::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        augment A @53
-          reference: <testLibrary>::@fragment::package:test/b.dart::@extensionTypeAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@extensionType::A
-''');
-  }
-}
-
-@reflectiveTest
-class ExtensionTypeFromBytesTest extends ElementsBaseTest
-    with ExtensionTypeMixin {
-  @override
-  bool get keepLinkingLibraries => false;
-}
-
-@reflectiveTest
-class ExtensionTypeKeepLinkingTest extends ElementsBaseTest
-    with ExtensionTypeMixin {
-  @override
-  bool get keepLinkingLibraries => true;
-}
-
-mixin ExtensionTypeMixin on ElementsBaseTest {
-  test_constructor_const() async {
-    var library = await buildLibrary(r'''
-extension type const A(int it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @21
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @27
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            const @21
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @27
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_constructor_named() async {
-    var library = await buildLibrary(r'''
-extension type A.named(int it) {}
-''');
-
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 33
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::named
-          typeErasure: int
-          fields
-            final it @27
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              codeOffset: 23
-              codeLength: 6
-              type: int
-          constructors
-            named @17
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              codeOffset: 16
-              codeLength: 14
-              periodOffset: 16
-              nameEnd: 22
-              parameters
-                requiredPositional final this.it @27
-                  type: int
-                  codeOffset: 23
-                  codeLength: 6
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_constructor_secondary_fieldFormalParameter() async {
-    var library = await buildLibrary(r'''
-extension type A(num it) {
-  A.named(this.it);
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: num
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: num
-          constructors
-            @15
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @21
-                  type: num
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-            named @31
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              periodOffset: 30
-              nameEnd: 36
-              parameters
-                requiredPositional final this.it @42
-                  type: num
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: num
-''');
-  }
-
-  test_constructor_secondary_fieldFormalParameter_typed() async {
-    var library = await buildLibrary(r'''
-extension type A(num it) {
-  A.named(int this.it);
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: num
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: num
-          constructors
-            @15
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @21
-                  type: num
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-            named @31
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              periodOffset: 30
-              nameEnd: 36
-              parameters
-                requiredPositional final this.it @46
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: num
-''');
-  }
-
-  test_constructor_secondary_fieldInitializer() async {
-    var library = await buildLibrary(r'''
-extension type A(num it) {
-  const A.named(int a) : it = a;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: num
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: num
-          constructors
-            @15
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @21
-                  type: num
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-            const named @37
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::named
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              periodOffset: 36
-              nameEnd: 42
-              parameters
-                requiredPositional a @47
-                  type: int
-              constantInitializers
-                ConstructorFieldInitializer
-                  fieldName: SimpleIdentifier
-                    token: it @52
-                    staticElement: <testLibraryFragment>::@extensionType::A::@field::it
-                    staticType: null
-                  equals: = @55
-                  expression: SimpleIdentifier
-                    token: a @57
-                    staticElement: <testLibraryFragment>::@extensionType::A::@constructor::named::@parameter::a
-                    staticType: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: num
-''');
-  }
-
-  test_constructor_unnamed() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) {}
-''');
-
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 27
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              codeOffset: 17
-              codeLength: 6
-              type: int
-          constructors
-            @15
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              codeOffset: 16
-              codeLength: 8
-              parameters
-                requiredPositional final this.it @21
-                  type: int
-                  codeOffset: 17
-                  codeLength: 6
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_documentation() async {
-    var library = await buildLibrary(r'''
-/// Docs
-extension type A(int it) {
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @24
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          documentationComment: /// Docs
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @30
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @24
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @30
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_field_const_typed() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) {
-  static const int foo = 0;
-}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-            static const foo @46
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @52
-                  staticType: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_field_const_untyped() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) {
-  static const foo = 0;
-}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-            static const foo @42
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: false
-              constantInitializer
-                IntegerLiteral
-                  literal: 0 @48
-                  staticType: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-            synthetic static get foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_field_instance_untyped() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) {
-  final foo = 0;
-}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-            final foo @35
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-              shouldUseTypeForInitializerInference: false
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_field_metadata() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-const foo = 0;
-''');
-
-    var library = await buildLibrary(r'''
-import 'a.dart';
-extension type A(@foo int it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        A @32
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @43
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              metadata
-                Annotation
-                  atSign: @ @34
-                  name: SimpleIdentifier
-                    token: foo @35
-                    staticElement: package:test/a.dart::<fragment>::@getter::foo
-                    staticType: null
-                  element: package:test/a.dart::<fragment>::@getter::foo
-              type: int
-          constructors
-            @32
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @43
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_getter() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) {
-  int get foo => 0;
-}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-            get foo @37
-              reference: <testLibraryFragment>::@extensionType::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_interfaces_class() async {
-    var library = await buildLibrary(r'''
-class A {}
-class B {}
-class C implements A, B {}
-extension type X(C it) implements A, B {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-        class B @17
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-        class C @28
-          reference: <testLibraryFragment>::@class::C
-          enclosingElement: <testLibraryFragment>
-          interfaces
-            A
-            B
-      extensionTypes
-        X @64
-          reference: <testLibraryFragment>::@extensionType::X
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::X::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::X::@constructor::new
-          typeErasure: C
-          interfaces
-            A
-            B
-          fields
-            final it @68
-              reference: <testLibraryFragment>::@extensionType::X::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::X
-              type: C
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::X::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::X
-              returnType: C
-''');
-  }
-
-  test_interfaces_cycle2() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) implements B {}
-extension type B(int it) implements A {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        hasImplementsSelfReference A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          interfaces
-            Object
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-        hasImplementsSelfReference B @56
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: int
-          interfaces
-            Object
-          fields
-            final it @62
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: int
-''');
-  }
-
-  test_interfaces_cycle_self() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) implements A {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        hasImplementsSelfReference A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          interfaces
-            Object
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_interfaces_extensionType() async {
-    var library = await buildLibrary(r'''
-extension type A(num it) {}
-extension type B(int it) implements A {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: num
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: num
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: num
-        B @43
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: int
-          interfaces
-            A
-          fields
-            final it @49
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: int
-''');
-  }
-
-  test_interfaces_futureOr() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) implements num, FutureOr<int> {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          interfaces
-            num
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_interfaces_implicitObjectQuestion() async {
-    var library = await buildLibrary(r'''
-extension type X(int? it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        X @15
-          reference: <testLibraryFragment>::@extensionType::X
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::X::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::X::@constructor::new
-          typeErasure: int?
-          fields
-            final it @22
-              reference: <testLibraryFragment>::@extensionType::X::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::X
-              type: int?
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::X::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::X
-              returnType: int?
-''');
-  }
-
-  test_interfaces_implicitObjectQuestion_fromTypeParameter() async {
-    var library = await buildLibrary(r'''
-extension type A<T>(T it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @17
-              defaultType: dynamic
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: T
-          fields
-            final it @22
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: T
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: T
-''');
-  }
-
-  test_interfaces_void() async {
-    var library = await buildLibrary(r'''
-typedef A = void;
-extension type X(int it) implements A, num {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        X @33
-          reference: <testLibraryFragment>::@extensionType::X
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::X::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::X::@constructor::new
-          typeErasure: int
-          interfaces
-            num
-          fields
-            final it @39
-              reference: <testLibraryFragment>::@extensionType::X::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::X
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::X::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::X
-              returnType: int
-      typeAliases
-        A @8
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: void
-''');
-  }
-
-  test_isPromotable_representationField_private() async {
-    var library = await buildLibrary(r'''
-extension type A(int? _it) {}
-
-class B {
-  int _it = 0;
-}
-
-class C {
-  int get _it => 0;
-}
-''');
-
-    configuration
-      ..forPromotableFields(extensionTypeNames: {'A'})
-      ..withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::_it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int?
-          fields
-            final promotable _it @22
-              reference: <testLibraryFragment>::@extensionType::A::@field::_it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int?
-  fieldNameNonPromotabilityInfo
-    _it
-      conflictingFields
-        <testLibraryFragment>::@class::B::@field::_it
-      conflictingGetters
-        <testLibraryFragment>::@class::C::@getter::_it
-''');
-  }
-
-  test_metadata() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-const foo = 0;
-''');
-
-    var library = await buildLibrary(r'''
-import 'a.dart';
-@foo
-extension type A(int it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      extensionTypes
-        A @37
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          metadata
-            Annotation
-              atSign: @ @17
-              name: SimpleIdentifier
-                token: foo @18
-                staticElement: package:test/a.dart::<fragment>::@getter::foo
-                staticType: null
-              element: package:test/a.dart::<fragment>::@getter::foo
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @43
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          constructors
-            @37
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @43
-                  type: int
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_method() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) {
-  void foo(int a) {}
-}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          methods
-            foo @34
-              reference: <testLibraryFragment>::@extensionType::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional a @42
-                  type: int
-              returnType: void
-''');
-  }
-
-  test_method_defaultFormalParameter_defaultValue() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) {
-  void foo({int a = 0}) {}
-}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-          methods
-            foo @34
-              reference: <testLibraryFragment>::@extensionType::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                optionalNamed default a @43
-                  reference: <testLibraryFragment>::@extensionType::A::@method::foo::@parameter::a
-                  type: int
-                  constantInitializer
-                    IntegerLiteral
-                      literal: 0 @47
-                      staticType: int
-              returnType: void
-''');
-  }
-
-  test_noField() async {
-    var library = await buildLibrary(r'''
-extension type A() {}
-''');
-
-    configuration.withCodeRanges = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          codeOffset: 0
-          codeLength: 21
-          representation: <testLibraryFragment>::@extensionType::A::@field::<empty>
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: InvalidType
-          fields
-            final <empty> @17
-              reference: <testLibraryFragment>::@extensionType::A::@field::<empty>
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              codeOffset: 17
-              codeLength: 0
-              type: InvalidType
-          constructors
-            @15
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              codeOffset: 16
-              codeLength: 2
-              parameters
-                requiredPositional final this.<empty> @17
-                  type: InvalidType
-                  codeOffset: 17
-                  codeLength: 0
-                  field: <testLibraryFragment>::@extensionType::A::@field::<empty>
-          accessors
-            synthetic get <empty> @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::<empty>
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: InvalidType
-''');
-  }
-
-  test_notSimplyBounded_self() async {
-    var library = await buildLibrary(r'''
-extension type A<T extends A>(int it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        notSimplyBounded A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @17
-              bound: A<dynamic>
-              defaultType: dynamic
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @34
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_setter() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) {
-  set foo(double _) {}
-}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@extensionType::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: double
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-            set foo= @33
-              reference: <testLibraryFragment>::@extensionType::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional _ @44
-                  type: double
-              returnType: void
-''');
-  }
-
-  test_typeErasure_hasExtension_cycle2_direct() async {
-    var library = await buildLibrary(r'''
-extension type A(B it) {}
-
-extension type B(A it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        hasRepresentationSelfReference A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: InvalidType
-          fields
-            final it @19
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: InvalidType
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: InvalidType
-        hasRepresentationSelfReference B @42
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: InvalidType
-          fields
-            final it @46
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: InvalidType
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: InvalidType
-''');
-  }
-
-  test_typeErasure_hasExtension_cycle2_typeArgument() async {
-    var library = await buildLibrary(r'''
-extension type A(B it) {}
-
-extension type B(List<B> it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: InvalidType
-          fields
-            final it @19
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: B
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: B
-        hasRepresentationSelfReference B @42
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: InvalidType
-          fields
-            final it @52
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: InvalidType
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: InvalidType
-''');
-  }
-
-  test_typeErasure_hasExtension_cycle_self() async {
-    var library = await buildLibrary(r'''
-extension type A(A it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        hasRepresentationSelfReference A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: InvalidType
-          fields
-            final it @19
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: InvalidType
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: InvalidType
-''');
-  }
-
-  test_typeErasure_hasExtension_functionType() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) {}
-
-extension type B(A Function(A a) it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-        B @44
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: int Function(int)
-          fields
-            final it @62
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: A Function(A)
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: A Function(A)
-''');
-  }
-
-  test_typeErasure_hasExtension_interfaceType() async {
-    var library = await buildLibrary(r'''
-extension type A<T>(T it) {}
-
-extension type B(A<double> it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @17
-              defaultType: dynamic
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: T
-          fields
-            final it @22
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: T
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: T
-        B @45
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: double
-          fields
-            final it @57
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: A<double>
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: A<double>
-''');
-  }
-
-  test_typeErasure_hasExtension_interfaceType_typeArgument() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) {}
-
-extension type B(List<A> it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-        B @44
-          reference: <testLibraryFragment>::@extensionType::B
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::B::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::B::@constructor::new
-          typeErasure: List<int>
-          fields
-            final it @54
-              reference: <testLibraryFragment>::@extensionType::B::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              type: List<A>
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::B::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::B
-              returnType: List<A>
-''');
-  }
-
-  test_typeErasure_notExtension() async {
-    var library = await buildLibrary(r'''
-extension type A(int it) {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: int
-          fields
-            final it @21
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: int
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: int
-''');
-  }
-
-  test_typeParameters() async {
-    var library = await buildLibrary(r'''
-extension type A<T extends num, U>(Map<T, U> it) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      extensionTypes
-        A @15
-          reference: <testLibraryFragment>::@extensionType::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @17
-              bound: num
-              defaultType: num
-            covariant U @32
-              defaultType: dynamic
-          representation: <testLibraryFragment>::@extensionType::A::@field::it
-          primaryConstructor: <testLibraryFragment>::@extensionType::A::@constructor::new
-          typeErasure: Map<T, U>
-          fields
-            final it @45
-              reference: <testLibraryFragment>::@extensionType::A::@field::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              type: Map<T, U>
-          constructors
-            @15
-              reference: <testLibraryFragment>::@extensionType::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              parameters
-                requiredPositional final this.it @45
-                  type: Map<T, U>
-                  field: <testLibraryFragment>::@extensionType::A::@field::it
-          accessors
-            synthetic get it @-1
-              reference: <testLibraryFragment>::@extensionType::A::@getter::it
-              enclosingElement: <testLibraryFragment>::@extensionType::A
-              returnType: Map<T, U>
-''');
-  }
-}
-
-@reflectiveTest
-class FunctionAugmentationFromBytesTest extends ElementsBaseTest
-    with FunctionAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => false;
-}
-
-@reflectiveTest
-class FunctionAugmentationKeepLinkingTest extends ElementsBaseTest
-    with FunctionAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => true;
-}
-
-mixin FunctionAugmentationMixin on ElementsBaseTest {
-  test_function_augmentationTarget() async {
-    newFile('$testPackageLibPath/a1.dart', r'''
-augment library 'test.dart';
-import augment 'a11.dart';
-import augment 'a12.dart';
-augment void foo() {}
-''');
-
-    newFile('$testPackageLibPath/a11.dart', r'''
-augment library 'a1.dart';
-augment void foo() {}
-''');
-
-    newFile('$testPackageLibPath/a12.dart', r'''
-augment library 'a1.dart';
-augment void foo() {}
-''');
-
-    newFile('$testPackageLibPath/a2.dart', r'''
-augment library 'test.dart';
-import augment 'a21.dart';
-import augment 'a22.dart';
-augment void foo() {}
-''');
-
-    newFile('$testPackageLibPath/a21.dart', r'''
-augment library 'a2.dart';
-augment void foo() {}
-''');
-
-    newFile('$testPackageLibPath/a22.dart', r'''
-augment library 'a2.dart';
-augment void foo() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a1.dart';
-import augment 'a2.dart';
-void foo() {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a1.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a1.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a1.dart
-      augmentationImports
-        package:test/a11.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
-          reference: <testLibrary>::@augmentation::package:test/a11.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a11.dart
-        package:test/a12.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
-          reference: <testLibrary>::@augmentation::package:test/a12.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a12.dart
-    package:test/a2.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a2.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a2.dart
-      augmentationImports
-        package:test/a21.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
-          reference: <testLibrary>::@augmentation::package:test/a21.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a21.dart
-        package:test/a22.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
-          reference: <testLibrary>::@augmentation::package:test/a22.dart
-          definingUnit: <testLibrary>::@fragment::package:test/a22.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        foo @57
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: void
-          augmentation: <testLibrary>::@fragment::package:test/a1.dart::@functionAugmentation::foo
-    <testLibrary>::@fragment::package:test/a1.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a1.dart
-      enclosingElement3: <testLibraryFragment>
-      functions
-        augment foo @96
-          reference: <testLibrary>::@fragment::package:test/a1.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a1.dart
-          returnType: void
-          augmentationTarget: <testLibraryFragment>::@function::foo
-          augmentation: <testLibrary>::@fragment::package:test/a11.dart::@functionAugmentation::foo
-    <testLibrary>::@fragment::package:test/a11.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a11.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
-      functions
-        augment foo @40
-          reference: <testLibrary>::@fragment::package:test/a11.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a11.dart
-          returnType: void
-          augmentationTarget: <testLibrary>::@fragment::package:test/a1.dart::@functionAugmentation::foo
-          augmentation: <testLibrary>::@fragment::package:test/a12.dart::@functionAugmentation::foo
-    <testLibrary>::@fragment::package:test/a12.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a12.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a1.dart
-      functions
-        augment foo @40
-          reference: <testLibrary>::@fragment::package:test/a12.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a12.dart
-          returnType: void
-          augmentationTarget: <testLibrary>::@fragment::package:test/a11.dart::@functionAugmentation::foo
-          augmentation: <testLibrary>::@fragment::package:test/a2.dart::@functionAugmentation::foo
-    <testLibrary>::@fragment::package:test/a2.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a2.dart
-      enclosingElement3: <testLibraryFragment>
-      functions
-        augment foo @96
-          reference: <testLibrary>::@fragment::package:test/a2.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a2.dart
-          returnType: void
-          augmentationTarget: <testLibrary>::@fragment::package:test/a12.dart::@functionAugmentation::foo
-          augmentation: <testLibrary>::@fragment::package:test/a21.dart::@functionAugmentation::foo
-    <testLibrary>::@fragment::package:test/a21.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a21.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
-      functions
-        augment foo @40
-          reference: <testLibrary>::@fragment::package:test/a21.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a21.dart
-          returnType: void
-          augmentationTarget: <testLibrary>::@fragment::package:test/a2.dart::@functionAugmentation::foo
-          augmentation: <testLibrary>::@fragment::package:test/a22.dart::@functionAugmentation::foo
-    <testLibrary>::@fragment::package:test/a22.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a22.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a2.dart
-      functions
-        augment foo @40
-          reference: <testLibrary>::@fragment::package:test/a22.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a22.dart
-          returnType: void
-          augmentationTarget: <testLibrary>::@fragment::package:test/a21.dart::@functionAugmentation::foo
-''');
-  }
-
-  test_function_augments_class() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment void foo() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-
-class foo {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class foo @32
-          reference: <testLibraryFragment>::@class::foo
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::foo::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      functions
-        augment foo @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: void
-          augmentationTargetAny: <testLibraryFragment>::@class::foo
-''');
-  }
-
-  test_function_augments_function() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment void foo() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-void foo() {}
-''');
-
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        foo @30
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: void
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      functions
-        augment foo @42
-          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: void
-          augmentationTarget: <testLibraryFragment>::@function::foo
-  exportedReferences
-    declared <testLibraryFragment>::@function::foo
-  exportNamespace
-    foo: <testLibraryFragment>::@function::foo
-''');
-  }
-
-  test_function_augments_function2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-void foo() {}
-augment void foo() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      functions
-        foo @34
-          reference: <testLibrary>::@fragment::package:test/a.dart::@function::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: void
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
-        augment foo @56
-          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: void
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@function::foo
-  exportedReferences
-    declared <testLibrary>::@fragment::package:test/a.dart::@function::foo
-  exportNamespace
-    foo: <testLibrary>::@fragment::package:test/a.dart::@function::foo
-''');
-  }
-
-  test_function_augments_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment void foo() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-
-int get foo => 0;
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static get foo @34
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      functions
-        augment foo @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: void
-          augmentationTargetAny: <testLibraryFragment>::@getter::foo
-''');
-  }
-
-  test_function_augments_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment void foo() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-
-set foo(int _) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static set foo= @30
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _ @38
-              type: int
-          returnType: void
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      functions
-        augment foo @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: void
-          augmentationTargetAny: <testLibraryFragment>::@setter::foo
-''');
-  }
-
-  test_function_augments_variable() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment void foo() {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-
-int foo = 0;
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static foo @30
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-        synthetic static set foo= @-1
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _foo @-1
-              type: int
-          returnType: void
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      functions
-        augment foo @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@functionAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: void
-          augmentationTargetAny: <testLibraryFragment>::@getter::foo
-''');
-  }
-
-  test_getter_augments_class() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment int get foo => 0;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class foo {}
-''');
-
-    configuration
-      ..withConstructors = false
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class foo @31
-          reference: <testLibraryFragment>::@class::foo
-          enclosingElement: <testLibraryFragment>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      accessors
-        augment static get foo @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-          id: getter_0
-          variable: <null>
-          augmentationTargetAny: <testLibraryFragment>::@class::foo
-  exportedReferences
-    declared <testLibraryFragment>::@class::foo
-  exportNamespace
-    foo: <testLibraryFragment>::@class::foo
-''');
-  }
-
-  test_getter_augments_function() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment int get foo => 0;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-void foo() {}
-''');
-
-    configuration
-      ..withConstructors = false
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        foo @30
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: void
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      accessors
-        augment static get foo @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-          id: getter_0
-          variable: <null>
-          augmentationTargetAny: <testLibraryFragment>::@function::foo
-  exportedReferences
-    declared <testLibraryFragment>::@function::foo
-  exportNamespace
-    foo: <testLibraryFragment>::@function::foo
-''');
-  }
-
-  test_getter_augments_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment int get foo => 0;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-int get foo => 0;
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          id: variable_0
-          getter: getter_0
-      accessors
-        static get foo @33
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_0
-          variable: variable_0
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      accessors
-        augment static get foo @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-          id: getter_1
-          variable: variable_0
-          augmentationTarget: <testLibraryFragment>::@getter::foo
-  exportedReferences
-    declared <testLibraryFragment>::@getter::foo
-  exportNamespace
-    foo: <testLibraryFragment>::@getter::foo
-''');
-  }
-
-  test_getter_augments_nothing() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment int get foo => 0;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      accessors
-        augment static get foo @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-          id: getter_0
-          variable: <null>
-  exportedReferences
-  exportNamespace
-''');
-  }
-
-  test_getter_augments_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment int get foo => 0;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-set foo(int _) {}
-''');
-
-    configuration
-      ..withConstructors = false
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          id: variable_0
-          setter: setter_0
-      accessors
-        static set foo= @29
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _ @37
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      accessors
-        augment static get foo @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-          id: getter_0
-          variable: <null>
-          augmentationTargetAny: <testLibraryFragment>::@setter::foo
-  exportedReferences
-    declared <testLibraryFragment>::@setter::foo
-  exportNamespace
-    foo=: <testLibraryFragment>::@setter::foo
-''');
-  }
-
-  test_getter_augments_topVariable() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment int get foo => 0;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-int foo = 0;
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static foo @29
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          id: variable_0
-          getter: getter_0
-          setter: setter_0
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_0
-          variable: variable_0
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
-        synthetic static set foo= @-1
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _foo @-1
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      accessors
-        augment static get foo @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getterAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-          id: getter_1
-          variable: variable_0
-          augmentationTarget: <testLibraryFragment>::@getter::foo
-  exportedReferences
-    declared <testLibraryFragment>::@getter::foo
-    declared <testLibraryFragment>::@setter::foo
-  exportNamespace
-    foo: <testLibraryFragment>::@getter::foo
-    foo=: <testLibraryFragment>::@setter::foo
-''');
-  }
-
-  test_setter_augments_class() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment set foo(int _) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class foo {}
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class foo @31
-          reference: <testLibraryFragment>::@class::foo
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::foo::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      accessors
-        augment static set foo= @41
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _ @49
-              type: int
-          returnType: void
-          id: setter_0
-          variable: <null>
-          augmentationTargetAny: <testLibraryFragment>::@class::foo
-  exportedReferences
-    declared <testLibraryFragment>::@class::foo
-  exportNamespace
-    foo: <testLibraryFragment>::@class::foo
-''');
-  }
-
-  test_setter_augments_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment set foo(int _) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-int get foo => 0;
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          id: variable_0
-          getter: getter_0
-      accessors
-        static get foo @33
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_0
-          variable: variable_0
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      accessors
-        augment static set foo= @41
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _ @49
-              type: int
-          returnType: void
-          id: setter_0
-          variable: <null>
-          augmentationTargetAny: <testLibraryFragment>::@getter::foo
-  exportedReferences
-    declared <testLibraryFragment>::@getter::foo
-  exportNamespace
-    foo: <testLibraryFragment>::@getter::foo
-''');
-  }
-
-  test_setter_augments_nothing() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment set foo(int _) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      accessors
-        augment static set foo= @41
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _ @49
-              type: int
-          returnType: void
-          id: setter_0
-          variable: <null>
-  exportedReferences
-  exportNamespace
-''');
-  }
-
-  test_setter_augments_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment set foo(int _) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-set foo(int _) {}
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          id: variable_0
-          setter: setter_0
-      accessors
-        static set foo= @29
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _ @37
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      accessors
-        augment static set foo= @41
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _ @49
-              type: int
-          returnType: void
-          id: setter_1
-          variable: variable_0
-          augmentationTarget: <testLibraryFragment>::@setter::foo
-  exportedReferences
-    declared <testLibraryFragment>::@setter::foo
-  exportNamespace
-    foo=: <testLibraryFragment>::@setter::foo
-''');
-  }
-
-  test_setter_augments_topVariable() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment set foo(int _) {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-int foo = 0;
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static foo @29
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          id: variable_0
-          getter: getter_0
-          setter: setter_0
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_0
-          variable: variable_0
-        synthetic static set foo= @-1
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _foo @-1
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      accessors
-        augment static set foo= @41
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setterAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _ @49
-              type: int
-          returnType: void
-          id: setter_1
-          variable: variable_0
-          augmentationTarget: <testLibraryFragment>::@setter::foo
-  exportedReferences
-    declared <testLibraryFragment>::@getter::foo
-    declared <testLibraryFragment>::@setter::foo
-  exportNamespace
-    foo: <testLibraryFragment>::@getter::foo
-    foo=: <testLibraryFragment>::@setter::foo
-''');
-  }
-}
-
-@reflectiveTest
-class MixinAugmentationFromBytesTest extends ElementsBaseTest
-    with MixinAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => false;
-}
-
-@reflectiveTest
-class MixinAugmentationKeepLinkingTest extends ElementsBaseTest
-    with MixinAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => true;
-}
-
-mixin MixinAugmentationMixin on ElementsBaseTest {
-  test_allSupertypes() async {
-    var library = await buildLibrary(r'''
-mixin M {}
-class A with M {}
-''');
-
-    configuration
-      ..withAllSupertypes = true
-      ..withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @17
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M
-          allSupertypes
-            M
-            Object
-      mixins
-        mixin M @6
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          allSupertypes
-            Object
-''');
-  }
-
-  test_allSupertypes_hasSuperclassConstraints() async {
-    var library = await buildLibrary(r'''
-class A {}
-mixin M on A {}
-class B with M {}
-''');
-
-    configuration
-      ..withAllSupertypes = true
-      ..withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @6
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          allSupertypes
-            Object
-        class B @33
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          supertype: Object
-          mixins
-            M
-          allSupertypes
-            A
-            M
-            Object
-      mixins
-        mixin M @17
-          reference: <testLibraryFragment>::@mixin::M
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            A
-          allSupertypes
-            A
-            Object
-''');
-  }
-
-  test_augmentationTarget() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment mixin A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment mixin A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {}
-''');
-
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          augmented
-            superclassConstraints
-              Object
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @68
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      mixins
-        augment mixin A @40
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-  exportedReferences
-    declared <testLibraryFragment>::@mixin::A
-  exportNamespace
-    A: <testLibraryFragment>::@mixin::A
-''');
-  }
-
-  test_augmentationTarget_augmentationThenDeclaration() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment class A {
-  void foo1() {}
-}
-
-class A {
-  void foo2() {}
-}
-
-augment class A {
-  void foo3() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
-          methods
-            foo1 @55
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0::@method::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::0
-              returnType: void
-        class A @74
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          methods
-            foo2 @85
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::A
-              returnType: void
-          augmented
-            constructors
-              <testLibrary>::@fragment::package:test/a.dart::@class::A::@constructor::new
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@class::A::@method::foo2
-              <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
-        augment class A @112
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@class::A
-          methods
-            foo3 @123
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1::@method::foo3
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@def::1
-              returnType: void
-''');
-  }
-
-  test_augmentationTarget_no2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment mixin A {
-  void foo1() {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment mixin A {
-  void foo2() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin B {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin B @31
-          reference: <testLibraryFragment>::@mixin::B
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @68
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          methods
-            foo1 @79
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: void
-          augmented
-            superclassConstraints
-              Object
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::foo1
-              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@method::foo2
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      mixins
-        augment mixin A @40
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          methods
-            foo2 @51
-              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@method::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmented_field_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            foo @41
-              reference: <testLibraryFragment>::@mixin::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibraryFragment>::@mixin::A::@getter::foo
-              <testLibraryFragment>::@mixin::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int foo = 1;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-mixin A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @56
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            foo @66
-              reference: <testLibraryFragment>::@mixin::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibraryFragment>::@mixin::A::@getter::foo
-              <testLibraryFragment>::@mixin::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_2
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-''');
-  }
-
-  test_augmented_field_augment_field_afterGetter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int get foo => 1;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-mixin A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @56
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            foo @66
-              reference: <testLibraryFragment>::@mixin::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@mixin::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_afterSetter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment set foo(int _) {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int foo = 2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-mixin A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @56
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            foo @66
-              reference: <testLibraryFragment>::@mixin::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibraryFragment>::@mixin::A::@getter::foo
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          accessors
-            augment set foo= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              parameters
-                requiredPositional _ @69
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@setter::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
-''');
-  }
-
-  test_augmented_field_augment_field_differentTypes() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment double foo = 1.2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            foo @41
-              reference: <testLibraryFragment>::@mixin::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibraryFragment>::@mixin::A::@getter::foo
-              <testLibraryFragment>::@mixin::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          fields
-            augment foo @64
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              type: double
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
-''');
-  }
-
-  /// This is not allowed by the specification, but allowed syntactically,
-  /// so we need a way to handle it.
-  test_augmented_field_augment_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int foo = 1;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  int get foo => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@mixin::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              id: field_0
-              getter: getter_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-          accessors
-            get foo @45
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-            accessors
-              <testLibraryFragment>::@mixin::A::@getter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          fields
-            augment foo @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@fieldAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@field::foo
-''');
-  }
-
-  test_augmented_fields_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  int foo2 = 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  int foo1 = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            foo1 @41
-              reference: <testLibraryFragment>::@mixin::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          accessors
-            synthetic get foo1 @-1
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo1= @-1
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _foo1 @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibraryFragment>::@mixin::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
-            accessors
-              <testLibraryFragment>::@mixin::A::@getter::foo1
-              <testLibraryFragment>::@mixin::A::@setter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          fields
-            foo2 @53
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_1
-              getter: getter_1
-              setter: setter_1
-          accessors
-            synthetic get foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-            synthetic set foo2= @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              parameters
-                requiredPositional _foo2 @-1
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_fields_add_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A<T2> {
-  T2 foo2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A<T1> {
-  T1 foo1;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            foo1 @44
-              reference: <testLibraryFragment>::@mixin::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: T1
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          accessors
-            synthetic get foo1 @-1
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: T1
-              id: getter_0
-              variable: field_0
-            synthetic set foo1= @-1
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _foo1 @-1
-                  type: T1
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibraryFragment>::@mixin::A::@field::foo1
-              FieldMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
-                augmentationSubstitution: {T2: T1}
-            accessors
-              <testLibraryFragment>::@mixin::A::@getter::foo1
-              <testLibraryFragment>::@mixin::A::@setter::foo1
-              PropertyAccessorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
-                augmentationSubstitution: {T2: T1}
-              PropertyAccessorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
-                augmentationSubstitution: {T2: T1}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          fields
-            foo2 @56
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              type: T2
-              id: field_1
-              getter: getter_1
-              setter: setter_1
-          accessors
-            synthetic get foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: T2
-              id: getter_1
-              variable: field_1
-            synthetic set foo2= @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              parameters
-                requiredPositional _foo2 @-1
-                  type: T2
-              returnType: void
-              id: setter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_getters_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  int get foo2 => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  int get foo1 => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@mixin::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              id: field_0
-              getter: getter_0
-          accessors
-            get foo1 @45
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibraryFragment>::@mixin::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
-            accessors
-              <testLibraryFragment>::@mixin::A::@getter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              type: int
-              id: field_1
-              getter: getter_1
-          accessors
-            get foo2 @57
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_getters_add_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A<T2> {
-  T2 get foo2;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A<T1> {
-  T1 get foo1;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T1 @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@mixin::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: T1
-              id: field_0
-              getter: getter_0
-          accessors
-            abstract get foo1 @48
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: T1
-              id: getter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibraryFragment>::@mixin::A::@field::foo1
-              FieldMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
-                augmentationSubstitution: {T2: T1}
-            accessors
-              <testLibraryFragment>::@mixin::A::@getter::foo1
-              PropertyAccessorMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
-                augmentationSubstitution: {T2: T1}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              type: T2
-              id: field_1
-              getter: getter_1
-          accessors
-            abstract get foo2 @60
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: T2
-              id: getter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_getters_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            foo @41
-              reference: <testLibraryFragment>::@mixin::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibraryFragment>::@mixin::A::@field::foo
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@mixin::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo
-''');
-  }
-
-  test_augmented_getters_augment_field2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int get foo => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-mixin A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @56
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            foo @66
-              reference: <testLibraryFragment>::@mixin::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibraryFragment>::@mixin::A::@field::foo
-            accessors
-              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
-              <testLibraryFragment>::@mixin::A::@setter::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_0
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-''');
-  }
-
-  test_augmented_getters_augment_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int get foo1 => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  int get foo1 => 0;
-  int get foo2 => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@mixin::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              id: field_0
-              getter: getter_0
-            synthetic foo2 @-1
-              reference: <testLibraryFragment>::@mixin::A::@field::foo2
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              id: field_1
-              getter: getter_1
-          accessors
-            get foo1 @45
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo1
-            get foo2 @66
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo2
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_1
-              variable: field_1
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibraryFragment>::@mixin::A::@field::foo1
-              <testLibraryFragment>::@mixin::A::@field::foo2
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo1
-              <testLibraryFragment>::@mixin::A::@getter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          accessors
-            augment get foo1 @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo1
-''');
-  }
-
-  test_augmented_getters_augment_getter2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int get foo => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment int get foo => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-mixin A {
-  int get foo => 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @56
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            synthetic foo @-1
-              reference: <testLibraryFragment>::@mixin::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              id: field_0
-              getter: getter_0
-          accessors
-            get foo @70
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibraryFragment>::@mixin::A::@field::foo
-            accessors
-              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: int
-              id: getter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@getter::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          accessors
-            augment get foo @65
-              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@getterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-              returnType: int
-              id: getter_2
-              variable: field_0
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@getterAugmentation::foo
-''');
-  }
-
-  test_augmented_interfaces() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A implements I2 {}
-class I2 {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A implements I1 {}
-class I1 {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I1 @56
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          interfaces
-            I1
-          augmented
-            superclassConstraints
-              Object
-            interfaces
-              I1
-              I2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class I2 @68
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          interfaces
-            I2
-''');
-  }
-
-  test_augmented_interfaces_chain() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment mixin A implements I2 {}
-class I2 {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment mixin A implements I3 {}
-class I3 {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A implements I1 {}
-class I1 {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I1 @56
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          interfaces
-            I1
-          augmented
-            superclassConstraints
-              Object
-            interfaces
-              I1
-              I2
-              I3
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class I2 @93
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-      mixins
-        augment mixin A @68
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          interfaces
-            I2
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        class I3 @65
-          reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::I3
-      mixins
-        augment mixin A @40
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          interfaces
-            I3
-''');
-  }
-
-  test_augmented_methods() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  void bar() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@mixin::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: void
-          augmented
-            superclassConstraints
-              Object
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar
-              <testLibraryFragment>::@mixin::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          methods
-            bar @54
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: void
-''');
-  }
-
-  test_augmented_methods_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment void foo1() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  void foo1() {}
-  void foo2() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          methods
-            foo1 @42
-              reference: <testLibraryFragment>::@mixin::A::@method::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo1
-            foo2 @59
-              reference: <testLibraryFragment>::@mixin::A::@method::foo2
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: void
-          augmented
-            superclassConstraints
-              Object
-            methods
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo1
-              <testLibraryFragment>::@mixin::A::@method::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          methods
-            augment foo1 @62
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo1
-''');
-  }
-
-  test_augmented_methods_augment2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment mixin A {
-  augment void foo() {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment mixin A {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  void foo() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@mixin::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
-          augmented
-            superclassConstraints
-              Object
-            methods
-              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @68
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          methods
-            augment foo @87
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      mixins
-        augment mixin A @40
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          methods
-            augment foo @59
-              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
-''');
-  }
-
-  test_augmented_methods_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A<T2> {
-  T2 bar() => throw 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A<T> {
-  T foo() => throw 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@mixin::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: T
-          augmented
-            superclassConstraints
-              Object
-            methods
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar
-                augmentationSubstitution: {T2: T}
-              <testLibraryFragment>::@mixin::A::@method::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          methods
-            bar @56
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: T2
-''');
-  }
-
-  test_augmented_methods_generic_augment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A<T2> {
-  augment T2 foo() => throw 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A<T> {
-  T foo() => throw 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@mixin::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: T
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
-          augmented
-            superclassConstraints
-              Object
-            methods
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
-                augmentationSubstitution: {T2: T}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          methods
-            augment foo @64
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: T2
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo
-''');
-  }
-
-  test_augmented_methods_typeParameterCountMismatch() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A<T> {
-  augment void foo() {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  void foo() {}
-  void bar() {}
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          methods
-            foo @42
-              reference: <testLibraryFragment>::@mixin::A::@method::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: void
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
-            bar @58
-              reference: <testLibraryFragment>::@mixin::A::@method::bar
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: void
-          augmented
-            superclassConstraints
-              Object
-            methods
-              <testLibraryFragment>::@mixin::A::@method::bar
-              MethodMember
-                base: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
-                augmentationSubstitution: {T: InvalidType}
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          methods
-            augment foo @65
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              returnType: void
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@method::foo
-''');
-  }
-
-  test_augmented_setters_add() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  set foo2(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  set foo1(int _) {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@mixin::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              id: field_0
-              setter: setter_0
-          accessors
-            set foo1= @41
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _ @50
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibraryFragment>::@mixin::A::@field::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
-            accessors
-              <testLibraryFragment>::@mixin::A::@setter::foo1
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          fields
-            synthetic foo2 @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              type: int
-              id: field_1
-              setter: setter_1
-          accessors
-            set foo2= @53
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setter::foo2
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              parameters
-                requiredPositional _ @62
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-''');
-  }
-
-  test_augmented_setters_augment_field() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment set foo(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  int foo = 0;
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            foo @41
-              reference: <testLibraryFragment>::@mixin::A::@field::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              shouldUseTypeForInitializerInference: true
-              id: field_0
-              getter: getter_0
-              setter: setter_0
-          accessors
-            synthetic get foo @-1
-              reference: <testLibraryFragment>::@mixin::A::@getter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              returnType: int
-              id: getter_0
-              variable: field_0
-            synthetic set foo= @-1
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _foo @-1
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibraryFragment>::@mixin::A::@field::foo
-            accessors
-              <testLibraryFragment>::@mixin::A::@getter::foo
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          accessors
-            augment set foo= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              parameters
-                requiredPositional _ @69
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@setter::foo
-''');
-  }
-
-  test_augmented_setters_augment_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A {
-  augment set foo1(int _) {}
-}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {
-  set foo1(int _) {}
-  set foo2(int _) {}
-}
-''');
-
-    configuration.withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          fields
-            synthetic foo1 @-1
-              reference: <testLibraryFragment>::@mixin::A::@field::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              id: field_0
-              setter: setter_0
-            synthetic foo2 @-1
-              reference: <testLibraryFragment>::@mixin::A::@field::foo2
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              type: int
-              id: field_1
-              setter: setter_1
-          accessors
-            set foo1= @41
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo1
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _ @50
-                  type: int
-              returnType: void
-              id: setter_0
-              variable: field_0
-              augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1
-            set foo2= @62
-              reference: <testLibraryFragment>::@mixin::A::@setter::foo2
-              enclosingElement: <testLibraryFragment>::@mixin::A
-              parameters
-                requiredPositional _ @71
-                  type: int
-              returnType: void
-              id: setter_1
-              variable: field_1
-          augmented
-            superclassConstraints
-              Object
-            fields
-              <testLibraryFragment>::@mixin::A::@field::foo1
-              <testLibraryFragment>::@mixin::A::@field::foo2
-            accessors
-              <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1
-              <testLibraryFragment>::@mixin::A::@setter::foo2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          accessors
-            augment set foo1= @61
-              reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@setterAugmentation::foo1
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-              parameters
-                requiredPositional _ @70
-                  type: int
-              returnType: void
-              id: setter_2
-              variable: field_0
-              augmentationTarget: <testLibraryFragment>::@mixin::A::@setter::foo1
-''');
-  }
-
-  test_augmented_superclassConstraints() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A on B2 {}
-class B2 {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A on B1 {}
-class B1 {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B1 @48
-          reference: <testLibraryFragment>::@class::B1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B1
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            B1
-          augmented
-            superclassConstraints
-              B1
-              B2
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class B2 @60
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B2
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          superclassConstraints
-            B2
-''');
-  }
-
-  test_augmented_superclassConstraints_chain() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-import augment 'b.dart';
-augment mixin A on I2 {}
-class I2 {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'a.dart';
-augment mixin A on I3 {}
-class I3 {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A on I1 {}
-class I1 {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-      augmentationImports
-        package:test/b.dart
-          enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-          reference: <testLibrary>::@augmentation::package:test/b.dart
-          definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I1 @48
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            I1
-          augmented
-            superclassConstraints
-              I1
-              I2
-              I3
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class I2 @85
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-      mixins
-        augment mixin A @68
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          superclassConstraints
-            I2
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibrary>::@fragment::package:test/a.dart
-      classes
-        class I3 @57
-          reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/b.dart::@class::I3::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@class::I3
-      mixins
-        augment mixin A @40
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            I3
-''');
-  }
-
-  test_augmented_superclassConstraints_fromAugmentation() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A on B {}
-class B {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          augmented
-            superclassConstraints
-              B
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class B @59
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::B
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::B::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::B
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          superclassConstraints
-            B
-''');
-  }
-
-  test_augmented_superclassConstraints_generic() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A<T2> on I2<T2> {}
-class I2<E> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A<T> on I1 {}
-class I1 {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I1 @51
-          reference: <testLibraryFragment>::@class::I1
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I1::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I1
-      mixins
-        mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            I1
-          augmented
-            superclassConstraints
-              I1
-              I2<T>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        class I2 @68
-          reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant E @71
-              defaultType: dynamic
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@class::I2
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T2 @45
-              defaultType: dynamic
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-          superclassConstraints
-            I2<T2>
-''');
-  }
-
-  test_augmentedBy_class2() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-
-mixin A {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @57
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTargetAny: <testLibraryFragment>::@mixin::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTargetAny: <testLibraryFragment>::@mixin::A
-''');
-  }
-
-  test_augmentedBy_class_mixin() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-
-augment class A {}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-
-augment mixin A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-import augment 'b.dart';
-
-mixin A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin A @57
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          augmented
-            superclassConstraints
-              Object
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      classes
-        augment class A @44
-          reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTargetAny: <testLibraryFragment>::@mixin::A
-          constructors
-            synthetic @-1
-              reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::new
-              enclosingElement: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @44
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-''');
-  }
-
-  test_inferTypes_method_ofAugment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  int foo(String a) => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment mixin B {
-  foo(a) => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import 'a.dart';
-import augment 'b.dart';
-
-mixin B on A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      mixins
-        mixin B @49
-          reference: <testLibraryFragment>::@mixin::B
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
-          superclassConstraints
-            A
-          augmented
-            superclassConstraints
-              A
-            methods
-              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@method::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin B @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::B
-          methods
-            foo @49
-              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@method::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
-              parameters
-                requiredPositional a @53
-                  type: String
-              returnType: int
-''');
-  }
-
-  test_inferTypes_method_usingAugmentation_interface() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  int foo(String a) => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-augment mixin B implements A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-
-mixin B {
-  foo(a) => 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin B @32
-          reference: <testLibraryFragment>::@mixin::B
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
-          superclassConstraints
-            Object
-          methods
-            foo @38
-              reference: <testLibraryFragment>::@mixin::B::@method::foo
-              enclosingElement: <testLibraryFragment>::@mixin::B
-              parameters
-                requiredPositional a @42
-                  type: String
-              returnType: int
-          augmented
-            superclassConstraints
-              Object
-            interfaces
-              A
-            methods
-              <testLibraryFragment>::@mixin::B::@method::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      mixins
-        augment mixin B @60
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::B
-          interfaces
-            A
-''');
-  }
-
-  test_inferTypes_method_usingAugmentation_superclassConstraint() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  int foo(String a) => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-import 'a.dart';
-augment mixin B on A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'b.dart';
-
-mixin B {
-  foo(a) => 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        mixin B @32
-          reference: <testLibraryFragment>::@mixin::B
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
-          methods
-            foo @38
-              reference: <testLibraryFragment>::@mixin::B::@method::foo
-              enclosingElement: <testLibraryFragment>::@mixin::B
-              parameters
-                requiredPositional a @42
-                  type: String
-              returnType: int
-          augmented
-            superclassConstraints
-              A
-            methods
-              <testLibraryFragment>::@mixin::B::@method::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibrary>::@fragment::package:test/b.dart
-      mixins
-        augment mixin B @60
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::B
-          superclassConstraints
-            A
-''');
-  }
-
-  test_inferTypes_method_withAugment() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-class A {
-  int foo(String a) => 0;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', r'''
-augment library 'test.dart';
-augment mixin B {
-  augment foo(a) => 0;
-}
-''');
-
-    var library = await buildLibrary(r'''
-import 'a.dart';
-import augment 'b.dart';
-
-mixin B on A {
-  foo(a) => 0;
-}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  libraryImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      enclosingElement3: <testLibraryFragment>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/b.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/b.dart
-      definingUnit: <testLibrary>::@fragment::package:test/b.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      libraryImports
-        package:test/a.dart
-          enclosingElement: <testLibrary>
-          enclosingElement3: <testLibraryFragment>
-      mixins
-        mixin B @49
-          reference: <testLibraryFragment>::@mixin::B
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
-          superclassConstraints
-            A
-          methods
-            foo @60
-              reference: <testLibraryFragment>::@mixin::B::@method::foo
-              enclosingElement: <testLibraryFragment>::@mixin::B
-              parameters
-                requiredPositional a @64
-                  type: String
-              returnType: int
-              augmentation: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo
-          augmented
-            superclassConstraints
-              A
-            methods
-              <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo
-    <testLibrary>::@fragment::package:test/b.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/b.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin B @43
-          reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
-          enclosingElement: <testLibrary>::@fragment::package:test/b.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::B
-          methods
-            augment foo @57
-              reference: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B::@methodAugmentation::foo
-              enclosingElement: <testLibrary>::@fragment::package:test/b.dart::@mixinAugmentation::B
-              parameters
-                requiredPositional a @61
-                  type: String
-              returnType: int
-              augmentationTarget: <testLibraryFragment>::@mixin::B::@method::foo
-''');
-  }
-
-  test_modifiers_base() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment base mixin A {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-base mixin A {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        base mixin A @36
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          augmented
-            superclassConstraints
-              Object
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment base mixin A @48
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-''');
-  }
-
-  test_notAugmented_interfaces() async {
-    var library = await buildLibrary(r'''
-mixin A implements I {}
-class I {}
-''');
-
-    configuration.withAugmentedWithoutAugmentation = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class I @30
-          reference: <testLibraryFragment>::@class::I
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::I::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::I
-          augmented
-      mixins
-        mixin A @6
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            Object
-          interfaces
-            I
-          augmented
-            superclassConstraints
-              Object
-            interfaces
-              I
-''');
-  }
-
-  test_notAugmented_superclassConstraints() async {
-    var library = await buildLibrary(r'''
-mixin A on B {}
-class B {}
-''');
-
-    configuration.withAugmentedWithoutAugmentation = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class B @22
-          reference: <testLibraryFragment>::@class::B
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::B::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::B
-          augmented
-      mixins
-        mixin A @6
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          superclassConstraints
-            B
-          augmented
-            superclassConstraints
-              B
-''');
-  }
-
-  test_notSimplyBounded_self() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment mixin A<T extends A> {}
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-mixin A<T extends A> {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      mixins
-        notSimplyBounded mixin A @31
-          reference: <testLibraryFragment>::@mixin::A
-          enclosingElement: <testLibraryFragment>
-          typeParameters
-            covariant T @33
-              bound: A<dynamic>
-              defaultType: dynamic
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          superclassConstraints
-            Object
-          augmented
-            superclassConstraints
-              Object
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      mixins
-        augment mixin A @43
-          reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          typeParameters
-            covariant T @45
-              bound: A<dynamic>
-              defaultType: A<dynamic>
-          augmentationTarget: <testLibraryFragment>::@mixin::A
-''');
-  }
-}
-
-@reflectiveTest
-class TopLevelVariableAugmentationFromBytesTest extends ElementsBaseTest
-    with TopLevelVariableAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => false;
-}
-
-@reflectiveTest
-class TopLevelVariableAugmentationKeepLinkingTest extends ElementsBaseTest
-    with TopLevelVariableAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => true;
-}
-
-mixin TopLevelVariableAugmentationMixin on ElementsBaseTest {
-  test_variable_augments_class() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment int A = 0;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {}
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-          constructors
-            synthetic @-1
-              reference: <testLibraryFragment>::@class::A::@constructor::new
-              enclosingElement: <testLibraryFragment>::@class::A
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        augment static A @41
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-          shouldUseTypeForInitializerInference: true
-          id: variable_0
-          getter: getter_0
-          setter: setter_0
-          augmentationTargetAny: <testLibraryFragment>::@class::A
-      accessors
-        synthetic static get A @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-          id: getter_0
-          variable: variable_0
-        synthetic static set A= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::A
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _A @-1
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-  exportedReferences
-    declared <testLibrary>::@fragment::package:test/a.dart::@getter::A
-    declared <testLibrary>::@fragment::package:test/a.dart::@setter::A
-  exportNamespace
-    A: <testLibrary>::@fragment::package:test/a.dart::@getter::A
-    A=: <testLibrary>::@fragment::package:test/a.dart::@setter::A
-''');
-  }
-
-  test_variable_augments_function() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment int foo = 0;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-void foo() {}
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        foo @30
-          reference: <testLibraryFragment>::@function::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: void
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        augment static foo @41
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-          shouldUseTypeForInitializerInference: true
-          id: variable_0
-          getter: getter_0
-          setter: setter_0
-          augmentationTargetAny: <testLibraryFragment>::@function::foo
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-          id: getter_0
-          variable: variable_0
-        synthetic static set foo= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _foo @-1
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-  exportedReferences
-    declared <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-    declared <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-  exportNamespace
-    foo: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-    foo=: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-''');
-  }
-
-  test_variable_augments_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment int foo = 0;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-int get foo => 0;
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          id: variable_0
-          getter: getter_0
-      accessors
-        static get foo @33
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_0
-          variable: variable_0
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        augment static foo @41
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-          shouldUseTypeForInitializerInference: true
-          id: variable_1
-          getter: getter_1
-          setter: setter_0
-          augmentationTargetAny: <testLibraryFragment>::@getter::foo
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-          id: getter_1
-          variable: variable_1
-        synthetic static set foo= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _foo @-1
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_1
-  exportedReferences
-    declared <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-    declared <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-  exportNamespace
-    foo: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-    foo=: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-''');
-  }
-
-  test_variable_augments_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment int foo = 0;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-set foo(int _) {}
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static foo @-1
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          id: variable_0
-          setter: setter_0
-      accessors
-        static set foo= @29
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _ @37
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        augment static foo @41
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-          shouldUseTypeForInitializerInference: true
-          id: variable_1
-          getter: getter_0
-          setter: setter_1
-          augmentationTargetAny: <testLibraryFragment>::@setter::foo
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-          id: getter_0
-          variable: variable_1
-        synthetic static set foo= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _foo @-1
-              type: int
-          returnType: void
-          id: setter_1
-          variable: variable_1
-  exportedReferences
-    declared <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-    declared <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-  exportNamespace
-    foo: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-    foo=: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-''');
-  }
-
-  test_variable_augments_variable() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment int foo = 1;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-int foo = 0;
-''');
-
-    configuration
-      ..withExportScope = true
-      ..withPropertyLinking = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static foo @29
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          id: variable_0
-          getter: getter_0
-          setter: setter_0
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-          id: getter_0
-          variable: variable_0
-        synthetic static set foo= @-1
-          reference: <testLibraryFragment>::@setter::foo
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _foo @-1
-              type: int
-          returnType: void
-          id: setter_0
-          variable: variable_0
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        augment static foo @41
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-          shouldUseTypeForInitializerInference: true
-          id: variable_1
-          getter: getter_1
-          setter: setter_1
-          augmentationTarget: <testLibraryFragment>::@topLevelVariable::foo
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-          id: getter_1
-          variable: variable_1
-        synthetic static set foo= @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          parameters
-            requiredPositional _foo @-1
-              type: int
-          returnType: void
-          id: setter_1
-          variable: variable_1
-  exportedReferences
-    declared <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-    declared <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-  exportNamespace
-    foo: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-    foo=: <testLibrary>::@fragment::package:test/a.dart::@setter::foo
-''');
-  }
-
-  test_variable_augments_variable_augmented_const_typed() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment const int foo = augmented + 1;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-const int foo = 0;
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        static const foo @35
-          reference: <testLibraryFragment>::@topLevelVariable::foo
-          enclosingElement: <testLibraryFragment>
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            IntegerLiteral
-              literal: 0 @41
-              staticType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibraryFragment>::@getter::foo
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      topLevelVariables
-        augment static const foo @47
-          reference: <testLibrary>::@fragment::package:test/a.dart::@topLevelVariableAugmentation::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          type: int
-          shouldUseTypeForInitializerInference: true
-          constantInitializer
-            BinaryExpression
-              leftOperand: AugmentedExpression
-                augmentedKeyword: augmented @53
-                element: <testLibraryFragment>::@topLevelVariable::foo
-                staticType: int
-              operator: + @63
-              rightOperand: IntegerLiteral
-                literal: 1 @65
-                staticType: int
-              staticElement: dart:core::<fragment>::@class::num::@method::+
-              staticInvokeType: num Function(num)
-              staticType: int
-          augmentationTarget: <testLibraryFragment>::@topLevelVariable::foo
-      accessors
-        synthetic static get foo @-1
-          reference: <testLibrary>::@fragment::package:test/a.dart::@getter::foo
-          enclosingElement: <testLibrary>::@fragment::package:test/a.dart
-          returnType: int
-''');
-  }
-}
-
-@reflectiveTest
-class TypeAliasAugmentationFromBytesTest extends ElementsBaseTest
-    with TypeAliasAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => false;
-}
-
-@reflectiveTest
-class TypeAliasAugmentationKeepLinkingTest extends ElementsBaseTest
-    with TypeAliasAugmentationMixin {
-  @override
-  bool get keepLinkingLibraries => true;
-}
-
-mixin TypeAliasAugmentationMixin on ElementsBaseTest {
-  test_typeAlias_augments_class() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment typedef A = int;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-class A {}
-''');
-
-    configuration.withConstructors = false;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      classes
-        class A @31
-          reference: <testLibraryFragment>::@class::A
-          enclosingElement: <testLibraryFragment>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      typeAliases
-        augment A @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
-          aliasedType: int
-          augmentationTargetAny: <testLibraryFragment>::@class::A
-''');
-  }
-
-  test_typeAlias_augments_function() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment typedef A = int;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-void A() {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      functions
-        A @30
-          reference: <testLibraryFragment>::@function::A
-          enclosingElement: <testLibraryFragment>
-          returnType: void
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      typeAliases
-        augment A @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
-          aliasedType: int
-          augmentationTargetAny: <testLibraryFragment>::@function::A
-''');
-  }
-
-  test_typeAlias_augments_getter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment typedef A = int;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-int get A => 0;
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static A @-1
-          reference: <testLibraryFragment>::@topLevelVariable::A
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static get A @33
-          reference: <testLibraryFragment>::@getter::A
-          enclosingElement: <testLibraryFragment>
-          returnType: int
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      typeAliases
-        augment A @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
-          aliasedType: int
-          augmentationTargetAny: <testLibraryFragment>::@getter::A
-''');
-  }
-
-  test_typeAlias_augments_nothing() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment typedef A = int;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-''');
-
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      typeAliases
-        augment A @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
-          aliasedType: int
-  exportedReferences
-  exportNamespace
-''');
-  }
-
-  test_typeAlias_augments_setter() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment typedef A = int;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-set A(int _) {}
-''');
-
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      topLevelVariables
-        synthetic static A @-1
-          reference: <testLibraryFragment>::@topLevelVariable::A
-          enclosingElement: <testLibraryFragment>
-          type: int
-      accessors
-        static set A= @29
-          reference: <testLibraryFragment>::@setter::A
-          enclosingElement: <testLibraryFragment>
-          parameters
-            requiredPositional _ @35
-              type: int
-          returnType: void
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      typeAliases
-        augment A @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
-          aliasedType: int
-          augmentationTargetAny: <testLibraryFragment>::@setter::A
-''');
-  }
-
-  test_typeAlias_augments_typeAlias() async {
-    newFile('$testPackageLibPath/a.dart', r'''
-augment library 'test.dart';
-augment typedef A = int;
-''');
-
-    var library = await buildLibrary(r'''
-import augment 'a.dart';
-typedef A = int;
-''');
-
-    configuration.withExportScope = true;
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  definingUnit: <testLibraryFragment>
-  augmentationImports
-    package:test/a.dart
-      enclosingElement: <testLibrary>
-      reference: <testLibrary>::@augmentation::package:test/a.dart
-      definingUnit: <testLibrary>::@fragment::package:test/a.dart
-  units
-    <testLibraryFragment>
-      enclosingElement: <testLibrary>
-      typeAliases
-        A @33
-          reference: <testLibraryFragment>::@typeAlias::A
-          aliasedType: int
-          augmentation: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
-    <testLibrary>::@fragment::package:test/a.dart
-      enclosingElement: <testLibrary>::@augmentation::package:test/a.dart
-      enclosingElement3: <testLibraryFragment>
-      typeAliases
-        augment A @45
-          reference: <testLibrary>::@fragment::package:test/a.dart::@typeAliasAugmentation::A
-          aliasedType: int
-          augmentationTarget: <testLibraryFragment>::@typeAlias::A
-  exportedReferences
-    declared <testLibraryFragment>::@typeAlias::A
-  exportNamespace
-    A: <testLibraryFragment>::@typeAlias::A
-''');
-  }
-}
-
-extension on ElementTextConfiguration {
-  void forPromotableFields({
-    Set<String> classNames = const {},
-    Set<String> enumNames = const {},
-    Set<String> extensionTypeNames = const {},
-    Set<String> mixinNames = const {},
-    Set<String> fieldNames = const {},
-  }) {
-    filter = (e) {
-      if (e is ClassElement) {
-        return classNames.contains(e.name);
-      } else if (e is ConstructorElement) {
-        return false;
-      } else if (e is EnumElement) {
-        return enumNames.contains(e.name);
-      } else if (e is ExtensionTypeElement) {
-        return extensionTypeNames.contains(e.name);
-      } else if (e is FieldElement) {
-        return fieldNames.isEmpty || fieldNames.contains(e.name);
-      } else if (e is MixinElement) {
-        return mixinNames.contains(e.name);
-      } else if (e is PartElement) {
-        return false;
-      } else if (e is PropertyAccessorElement) {
-        return false;
-      }
-      return true;
-    };
-  }
-
-  void forSinceSdkVersion() {
-    withConstantInitializers = false;
-    withConstructors = false;
-    withImports = false;
-    withMetadata = false;
-  }
-}
diff --git a/pkg/analyzer/test/src/summary/test_all.dart b/pkg/analyzer/test/src/summary/test_all.dart
index 444593a..4102499 100644
--- a/pkg/analyzer/test/src/summary/test_all.dart
+++ b/pkg/analyzer/test/src/summary/test_all.dart
@@ -5,7 +5,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'api_signature_test.dart' as api_signature;
-import 'elements_test.dart' as elements;
+import 'elements/test_all.dart' as elements;
 import 'flat_buffers_test.dart' as flat_buffers;
 import 'macro_test.dart' as macro;
 import 'reference_test.dart' as reference;