diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index c005a09..57905b9 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3417,7 +3417,6 @@
       returnType: returnType,
       nullabilitySuffix:
           isNullable ? NullabilitySuffix.question : _noneOrStarSuffix,
-      element: this,
     );
   }
 
diff --git a/pkg/analyzer/test/generated/simple_resolver_test.dart b/pkg/analyzer/test/generated/simple_resolver_test.dart
index 6000f44..981d29c 100644
--- a/pkg/analyzer/test/generated/simple_resolver_test.dart
+++ b/pkg/analyzer/test/generated/simple_resolver_test.dart
@@ -311,57 +311,6 @@
 class C {}''');
   }
 
-  test_commentReference_extension_getter() async {
-    await resolveTestCode('''
-/// See [E.b]
-class A {}
-
-extension E on A {
-  String get b => '';
-}
-''');
-
-    final classA = findNode.classDeclaration('class A');
-    final reference = classA.documentationComment!.references.single;
-
-    expect(
-        reference.identifier.staticElement, findElement.getter('b', of: 'E'));
-  }
-
-  test_commentReference_extension_method() async {
-    await resolveTestCode('''
-/// See [E.b]
-class A {}
-
-extension E on A {
-  void b() {}
-}
-''');
-
-    final classA = findNode.classDeclaration('class A');
-    final reference = classA.documentationComment!.references.single;
-
-    expect(
-        reference.identifier.staticElement, findElement.method('b', of: 'E'));
-  }
-
-  test_commentReference_extension_setter() async {
-    await resolveTestCode('''
-/// See [E.b]
-class A {}
-
-extension E on A {
-  set b(String x) {}
-}
-''');
-
-    final classA = findNode.classDeclaration('class A');
-    final reference = classA.documentationComment!.references.single;
-
-    expect(
-        reference.identifier.staticElement, findElement.setter('b', of: 'E'));
-  }
-
   test_continueTarget_labeled() async {
     // Verify that the target of the label is correctly found and is recorded
     // as the unlabeled portion of the statement.
diff --git a/pkg/analyzer/test/src/dart/resolution/comment_test.dart b/pkg/analyzer/test/src/dart/resolution/comment_test.dart
index 173fa0a..d5d1255 100644
--- a/pkg/analyzer/test/src/dart/resolution/comment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/comment_test.dart
@@ -167,6 +167,174 @@
     assertElement(findNode.simple('p5]'), findElement.parameter('p5'));
   }
 
+  test_identifier_class_instanceGetter() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+/// [A.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('A.foo'), findElement.class_('A'));
+    assertElement(findNode.simple('foo]'), findElement.getter('foo'));
+  }
+
+  test_identifier_class_instanceMethod() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  void foo() {}
+}
+
+/// [A.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('A.foo'), findElement.class_('A'));
+    assertElement(findNode.simple('foo]'), findElement.method('foo'));
+  }
+
+  test_identifier_class_instanceSetter() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  set foo(int _) {}
+}
+
+/// [A.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('A.foo'), findElement.class_('A'));
+    assertElement(findNode.simple('foo]'), findElement.setter('foo'));
+  }
+
+  test_identifier_class_staticGetter() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  static int get foo => 0;
+}
+
+/// [A.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('A.foo'), findElement.class_('A'));
+    assertElement(findNode.simple('foo]'), findElement.getter('foo'));
+  }
+
+  test_identifier_class_staticMethod() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  static void foo() {}
+}
+
+/// [A.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('A.foo'), findElement.class_('A'));
+    assertElement(findNode.simple('foo]'), findElement.method('foo'));
+  }
+
+  test_identifier_class_staticSetter() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  static set foo(int _) {}
+}
+
+/// [A.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('A.foo'), findElement.class_('A'));
+    assertElement(findNode.simple('foo]'), findElement.setter('foo'));
+  }
+
+  test_identifier_extension_instanceGetter() async {
+    await assertNoErrorsInCode(r'''
+extension E on int {
+  int get foo => 0;
+}
+
+/// [E.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('E.foo'), findElement.extension_('E'));
+    assertElement(findNode.simple('foo]'), findElement.getter('foo'));
+  }
+
+  test_identifier_extension_instanceMethod() async {
+    await assertNoErrorsInCode(r'''
+extension E on int {
+  void foo() {}
+}
+
+/// [E.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('E.foo'), findElement.extension_('E'));
+    assertElement(findNode.simple('foo]'), findElement.method('foo'));
+  }
+
+  test_identifier_extension_instanceSetter() async {
+    await assertNoErrorsInCode(r'''
+extension E on int {
+  set foo(int _) {}
+}
+
+/// [E.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('E.foo'), findElement.extension_('E'));
+    assertElement(findNode.simple('foo]'), findElement.setter('foo'));
+  }
+
+  test_identifier_extension_staticGetter() async {
+    await assertNoErrorsInCode(r'''
+extension E on int {
+  static int get foo => 0;
+}
+
+/// [E.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('E.foo'), findElement.extension_('E'));
+    assertElement(findNode.simple('foo]'), findElement.getter('foo'));
+  }
+
+  test_identifier_extension_staticMethod() async {
+    await assertNoErrorsInCode(r'''
+extension E on int {
+  static void foo() {}
+}
+
+/// [E.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('E.foo'), findElement.extension_('E'));
+    assertElement(findNode.simple('foo]'), findElement.method('foo'));
+  }
+
+  test_identifier_extension_staticSetter() async {
+    await assertNoErrorsInCode(r'''
+extension E on int {
+  static set foo(int _) {}
+}
+
+/// [E.foo]
+void f() {}
+''');
+
+    assertElement(findNode.simple('E.foo'), findElement.extension_('E'));
+    assertElement(findNode.simple('foo]'), findElement.setter('foo'));
+  }
+
   test_identifier_parameter_functionTyped() async {
     await assertNoErrorsInCode(r'''
 /// [bar]
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_directory_does_not_exist_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_directory_does_not_exist_test.dart
new file mode 100644
index 0000000..2d1ef5e
--- /dev/null
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_directory_does_not_exist_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../pubspec_test_support.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AssetDirectoryDoesNotExistTest);
+  });
+}
+
+@reflectiveTest
+class AssetDirectoryDoesNotExistTest extends PubspecDiagnosticTest {
+  test_assetDirectoryDoesExist_noError() {
+    newFolder('/sample/assets/logos');
+    assertNoErrors('''
+name: sample
+flutter:
+  assets:
+    - assets/logos/
+''');
+  }
+
+  test_assetDirectoryDoesNotExist_error() {
+    assertErrors('''
+name: sample
+flutter:
+  assets:
+    - assets/logos/
+''', [PubspecWarningCode.ASSET_DIRECTORY_DOES_NOT_EXIST]);
+  }
+}
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_does_not_exist_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_does_not_exist_test.dart
new file mode 100644
index 0000000..8cd2803
--- /dev/null
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_does_not_exist_test.dart
@@ -0,0 +1,67 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../pubspec_test_support.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AssetDoesNotExistTest);
+  });
+}
+
+@reflectiveTest
+class AssetDoesNotExistTest extends PubspecDiagnosticTest {
+  test_assetDoesNotExist_path_error() {
+    assertErrors('''
+name: sample
+flutter:
+  assets:
+    - assets/my_icon.png
+''', [PubspecWarningCode.ASSET_DOES_NOT_EXIST]);
+  }
+
+  test_assetDoesNotExist_path_inRoot_noError() {
+    newFile('/sample/assets/my_icon.png');
+    assertNoErrors('''
+name: sample
+flutter:
+  assets:
+    - assets/my_icon.png
+''');
+  }
+
+  test_assetDoesNotExist_path_inSubdir_noError() {
+    newFile('/sample/assets/images/2.0x/my_icon.png');
+    assertNoErrors('''
+name: sample
+flutter:
+  assets:
+    - assets/images/my_icon.png
+''');
+  }
+
+  @failingTest
+  test_assetDoesNotExist_uri_error() {
+    assertErrors('''
+name: sample
+flutter:
+  assets:
+    - packages/icons/my_icon.png
+''', [PubspecWarningCode.ASSET_DOES_NOT_EXIST]);
+  }
+
+  test_assetDoesNotExist_uri_noError() {
+    // TODO(brianwilkerson) Create a package named `icons` that contains the
+    // referenced file, and a `.packages` file that references that package.
+    assertNoErrors('''
+name: sample
+flutter:
+  assets:
+    - packages/icons/my_icon.png
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_field_not_list_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_field_not_list_test.dart
new file mode 100644
index 0000000..89b9c89
--- /dev/null
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_field_not_list_test.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../pubspec_test_support.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AssetFieldNotListTest);
+  });
+}
+
+@reflectiveTest
+class AssetFieldNotListTest extends PubspecDiagnosticTest {
+  test_assetFieldNotList_error_empty() {
+    assertErrors('''
+name: sample
+flutter:
+  assets:
+''', [PubspecWarningCode.ASSET_FIELD_NOT_LIST]);
+  }
+
+  test_assetFieldNotList_error_string() {
+    assertErrors('''
+name: sample
+flutter:
+  assets: assets/my_icon.png
+''', [PubspecWarningCode.ASSET_FIELD_NOT_LIST]);
+  }
+
+  test_assetFieldNotList_noError() {
+    newFile('/sample/assets/my_icon.png');
+    assertNoErrors('''
+name: sample
+flutter:
+  assets:
+    - assets/my_icon.png
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_not_string_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_not_string_test.dart
new file mode 100644
index 0000000..dd68fb2
--- /dev/null
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_not_string_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../pubspec_test_support.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AssetNotStringTest);
+  });
+}
+
+@reflectiveTest
+class AssetNotStringTest extends PubspecDiagnosticTest {
+  test_assetNotString_error_int() {
+    assertErrors('''
+name: sample
+flutter:
+  assets:
+    - 23
+''', [PubspecWarningCode.ASSET_NOT_STRING]);
+  }
+
+  test_assetNotString_error_map() {
+    assertErrors('''
+name: sample
+flutter:
+  assets:
+    - my_icon:
+      default: assets/my_icon.png
+      large: assets/large/my_icon.png
+''', [PubspecWarningCode.ASSET_NOT_STRING]);
+  }
+
+  test_assetNotString_noError() {
+    newFile('/sample/assets/my_icon.png');
+    assertNoErrors('''
+name: sample
+flutter:
+  assets:
+    - assets/my_icon.png
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/dependencies_field_not_map_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/dependencies_field_not_map_test.dart
new file mode 100644
index 0000000..4ff18ae
--- /dev/null
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/dependencies_field_not_map_test.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../pubspec_test_support.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(DependenciesFieldNotMapTest);
+  });
+}
+
+@reflectiveTest
+class DependenciesFieldNotMapTest extends PubspecDiagnosticTest {
+  test_dependenciesField_empty() {
+    assertNoErrors('''
+name: sample
+dependencies:
+''');
+  }
+
+  test_dependenciesFieldNotMap_error_bool() {
+    assertErrors('''
+name: sample
+dependencies: true
+''', [PubspecWarningCode.DEPENDENCIES_FIELD_NOT_MAP]);
+  }
+
+  test_dependenciesFieldNotMap_noError() {
+    assertNoErrors('''
+name: sample
+dependencies:
+  a: any
+''');
+  }
+
+  test_devDependenciesFieldNotMap_dev_error_bool() {
+    assertErrors('''
+name: sample
+dev_dependencies: true
+''', [PubspecWarningCode.DEPENDENCIES_FIELD_NOT_MAP]);
+  }
+}
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/flutter_field_not_map_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/flutter_field_not_map_test.dart
new file mode 100644
index 0000000..85f587b
--- /dev/null
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/flutter_field_not_map_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../pubspec_test_support.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FlutterFieldNotMapTest);
+  });
+}
+
+@reflectiveTest
+class FlutterFieldNotMapTest extends PubspecDiagnosticTest {
+  test_flutterField_empty_noError() {
+    assertNoErrors('''
+name: sample
+flutter:
+''');
+
+    assertNoErrors('''
+name: sample
+flutter:
+
+''');
+  }
+
+  test_flutterFieldNotMap_error_bool() {
+    assertErrors('''
+name: sample
+flutter: true
+''', [PubspecWarningCode.FLUTTER_FIELD_NOT_MAP]);
+  }
+
+  test_flutterFieldNotMap_noError() {
+    newFile('/sample/assets/my_icon.png');
+    assertNoErrors('''
+name: sample
+flutter:
+  assets:
+    - assets/my_icon.png
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/pubspec/validators/pubspec_dependency_validator_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/invalid_dependency_test.dart
similarity index 61%
rename from pkg/analyzer/test/src/pubspec/validators/pubspec_dependency_validator_test.dart
rename to pkg/analyzer/test/src/pubspec/diagnostics/invalid_dependency_test.dart
index cb52a95..b7b851d 100644
--- a/pkg/analyzer/test/src/pubspec/validators/pubspec_dependency_validator_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/invalid_dependency_test.dart
@@ -9,34 +9,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(PubspecDependencyValidatorTest);
+    defineReflectiveTests(InvalidDependencyTest);
   });
 }
 
 @reflectiveTest
-class PubspecDependencyValidatorTest extends BasePubspecValidatorTest {
-  test_dependenciesField_empty() {
-    assertNoErrors('''
-name: sample
-dependencies:
-''');
-  }
-
-  test_dependenciesFieldNotMap_error_bool() {
-    assertErrors('''
-name: sample
-dependencies: true
-''', [PubspecWarningCode.DEPENDENCIES_FIELD_NOT_MAP]);
-  }
-
-  test_dependenciesFieldNotMap_noError() {
-    assertNoErrors('''
-name: sample
-dependencies:
-  a: any
-''');
-  }
-
+class InvalidDependencyTest extends PubspecDiagnosticTest {
   test_dependencyGit_malformed_empty() {
     // todo (pq): consider validating.
     assertNoErrors('''
@@ -150,29 +128,6 @@
 ''');
   }
 
-  test_dependencyPath_pubspecDoesNotExist() {
-    newFolder('/foo');
-    assertErrors('''
-name: sample
-dependencies:
-  foo:
-    path: /foo
-''', [PubspecWarningCode.PATH_PUBSPEC_DOES_NOT_EXIST]);
-  }
-
-  test_dependencyPath_pubspecExists() {
-    newFolder('/foo');
-    newPubspecYamlFile('/foo', '''
-name: foo
-''');
-    assertNoErrors('''
-name: sample
-dependencies:
-  foo:
-    path: /foo
-''');
-  }
-
   test_dependencyPath_valid_absolute() {
     newFolder('/foo');
     newPubspecYamlFile('/foo', '''
@@ -228,15 +183,6 @@
 ''');
   }
 
-  test_dependencyPathDoesNotExist_path_error() {
-    assertErrors('''
-name: sample
-dependencies:
-  foo:
-    path: does/not/exist
-''', [PubspecWarningCode.PATH_DOES_NOT_EXIST]);
-  }
-
   test_devDependenciesField_empty() {
     assertNoErrors('''
 name: sample
@@ -244,13 +190,6 @@
 ''');
   }
 
-  test_devDependenciesFieldNotMap_dev_error_bool() {
-    assertErrors('''
-name: sample
-dev_dependencies: true
-''', [PubspecWarningCode.DEPENDENCIES_FIELD_NOT_MAP]);
-  }
-
   test_devDependenciesFieldNotMap_dev_noError() {
     assertNoErrors('''
 name: sample
@@ -271,63 +210,4 @@
       path: path/to/foo
 ''');
   }
-
-  test_devDependencyPathDoesNotExist_path_error() {
-    assertErrors('''
-name: sample
-dev_dependencies:
-  foo:
-    path: does/not/exist
-''', [PubspecWarningCode.PATH_DOES_NOT_EXIST]);
-  }
-
-  test_devDependencyPathExists() {
-    newFolder('/foo');
-    newPubspecYamlFile('/foo', '''
-name: foo
-''');
-    assertNoErrors('''
-name: sample
-dev_dependencies:
-  foo:
-    path: /foo
-''');
-  }
-
-  test_pathNotPosix_error() {
-    newFolder('/foo');
-    newPubspecYamlFile('/foo', '''
-name: foo
-''');
-    assertErrors(r'''
-name: sample
-version: 0.1.0
-publish_to: none
-dependencies:
-  foo:
-    path: \foo
-''', [
-      PubspecWarningCode.PATH_NOT_POSIX,
-    ]);
-  }
-
-  test_unnecessaryDevDependency_error() {
-    assertErrors('''
-name: sample
-dependencies:
-  a: any
-dev_dependencies:
-  a: any
-''', [PubspecWarningCode.UNNECESSARY_DEV_DEPENDENCY]);
-  }
-
-  test_unnecessaryDevDependency_noError() {
-    assertNoErrors('''
-name: sample
-dependencies:
-  a: any
-dev_dependencies:
-  b: any
-''');
-  }
 }
diff --git a/pkg/analyzer/test/src/pubspec/validators/pubspec_name_validator_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/missing_name_test.dart
similarity index 66%
copy from pkg/analyzer/test/src/pubspec/validators/pubspec_name_validator_test.dart
copy to pkg/analyzer/test/src/pubspec/diagnostics/missing_name_test.dart
index 71a7b97..9879c54 100644
--- a/pkg/analyzer/test/src/pubspec/validators/pubspec_name_validator_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/missing_name_test.dart
@@ -9,12 +9,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(PubspecNameValidatorTest);
+    defineReflectiveTests(MissingNameTest);
   });
 }
 
 @reflectiveTest
-class PubspecNameValidatorTest extends BasePubspecValidatorTest {
+class MissingNameTest extends PubspecDiagnosticTest {
   test_missingName_error() {
     assertErrors('', [PubspecWarningCode.MISSING_NAME]);
   }
@@ -24,16 +24,4 @@
 name: sample
 ''');
   }
-
-  test_nameNotString_error_int() {
-    assertErrors('''
-name: 42
-''', [PubspecWarningCode.NAME_NOT_STRING]);
-  }
-
-  test_nameNotString_noError() {
-    assertNoErrors('''
-name: sample
-''');
-  }
 }
diff --git a/pkg/analyzer/test/src/pubspec/validators/pubspec_name_validator_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/name_not_string_test.dart
similarity index 68%
rename from pkg/analyzer/test/src/pubspec/validators/pubspec_name_validator_test.dart
rename to pkg/analyzer/test/src/pubspec/diagnostics/name_not_string_test.dart
index 71a7b97..c58ef0a 100644
--- a/pkg/analyzer/test/src/pubspec/validators/pubspec_name_validator_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/name_not_string_test.dart
@@ -9,22 +9,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(PubspecNameValidatorTest);
+    defineReflectiveTests(NameNotStringTest);
   });
 }
 
 @reflectiveTest
-class PubspecNameValidatorTest extends BasePubspecValidatorTest {
-  test_missingName_error() {
-    assertErrors('', [PubspecWarningCode.MISSING_NAME]);
-  }
-
-  test_missingName_noError() {
-    assertNoErrors('''
-name: sample
-''');
-  }
-
+class NameNotStringTest extends PubspecDiagnosticTest {
   test_nameNotString_error_int() {
     assertErrors('''
 name: 42
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/path_does_not_exist_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/path_does_not_exist_test.dart
new file mode 100644
index 0000000..4afdda6
--- /dev/null
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/path_does_not_exist_test.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../pubspec_test_support.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(PathDoesNotExistTest);
+  });
+}
+
+@reflectiveTest
+class PathDoesNotExistTest extends PubspecDiagnosticTest {
+  test_dependencyPathDoesNotExist_path_error() {
+    assertErrors('''
+name: sample
+dependencies:
+  foo:
+    path: does/not/exist
+''', [PubspecWarningCode.PATH_DOES_NOT_EXIST]);
+  }
+
+  test_devDependencyPathDoesNotExist_path_error() {
+    assertErrors('''
+name: sample
+dev_dependencies:
+  foo:
+    path: does/not/exist
+''', [PubspecWarningCode.PATH_DOES_NOT_EXIST]);
+  }
+
+  test_devDependencyPathExists() {
+    newFolder('/foo');
+    newPubspecYamlFile('/foo', '''
+name: foo
+''');
+    assertNoErrors('''
+name: sample
+dev_dependencies:
+  foo:
+    path: /foo
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/path_not_posix_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/path_not_posix_test.dart
new file mode 100644
index 0000000..2a4c3bf
--- /dev/null
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/path_not_posix_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../pubspec_test_support.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(PathNotPosixTest);
+  });
+}
+
+@reflectiveTest
+class PathNotPosixTest extends PubspecDiagnosticTest {
+  test_pathNotPosix_error() {
+    newFolder('/foo');
+    newPubspecYamlFile('/foo', '''
+name: foo
+''');
+    assertErrors(r'''
+name: sample
+version: 0.1.0
+publish_to: none
+dependencies:
+  foo:
+    path: \foo
+''', [
+      PubspecWarningCode.PATH_NOT_POSIX,
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/path_pubspec_does_not_exist_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/path_pubspec_does_not_exist_test.dart
new file mode 100644
index 0000000..ea4b629
--- /dev/null
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/path_pubspec_does_not_exist_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../pubspec_test_support.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(PathPubspecDoesNotExistTest);
+  });
+}
+
+@reflectiveTest
+class PathPubspecDoesNotExistTest extends PubspecDiagnosticTest {
+  test_dependencyPath_pubspecDoesNotExist() {
+    newFolder('/foo');
+    assertErrors('''
+name: sample
+dependencies:
+  foo:
+    path: /foo
+''', [PubspecWarningCode.PATH_PUBSPEC_DOES_NOT_EXIST]);
+  }
+
+  test_dependencyPath_pubspecExists() {
+    newFolder('/foo');
+    newPubspecYamlFile('/foo', '''
+name: foo
+''');
+    assertNoErrors('''
+name: sample
+dependencies:
+  foo:
+    path: /foo
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/test_all.dart b/pkg/analyzer/test/src/pubspec/diagnostics/test_all.dart
new file mode 100644
index 0000000..7b1b0ed
--- /dev/null
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/test_all.dart
@@ -0,0 +1,38 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'asset_directory_does_not_exist_test.dart'
+    as asset_directory_does_not_exist;
+import 'asset_does_not_exist_test.dart' as asset_does_not_exist;
+import 'asset_field_not_list_test.dart' as asset_field_not_list;
+import 'asset_not_string_test.dart' as asset_not_string;
+import 'dependencies_field_not_map_test.dart' as dependencies_field_not_map;
+import 'flutter_field_not_map_test.dart' as flutter_field_not_map;
+import 'invalid_dependency_test.dart' as invalid_dependency;
+import 'missing_name_test.dart' as missing_name;
+import 'name_not_string_test.dart' as name_not_string;
+import 'path_does_not_exist_test.dart' as path_does_not_exist;
+import 'path_not_posix_test.dart' as path_not_posix;
+import 'path_pubspec_does_not_exist_test.dart' as path_pubspec_does_not_exist;
+import 'unnecessary_dev_dependency_test.dart' as unnecessary_dev_dependency;
+
+main() {
+  defineReflectiveSuite(() {
+    asset_directory_does_not_exist.main();
+    asset_does_not_exist.main();
+    asset_field_not_list.main();
+    asset_not_string.main();
+    dependencies_field_not_map.main();
+    flutter_field_not_map.main();
+    invalid_dependency.main();
+    missing_name.main();
+    name_not_string.main();
+    path_does_not_exist.main();
+    path_not_posix.main();
+    path_pubspec_does_not_exist.main();
+    unnecessary_dev_dependency.main();
+  }, name: 'diagnostics');
+}
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/unnecessary_dev_dependency_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/unnecessary_dev_dependency_test.dart
new file mode 100644
index 0000000..466f9d3
--- /dev/null
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/unnecessary_dev_dependency_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../pubspec_test_support.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(UnnecessaryDevDependencyTest);
+  });
+}
+
+@reflectiveTest
+class UnnecessaryDevDependencyTest extends PubspecDiagnosticTest {
+  test_unnecessaryDevDependency_error() {
+    assertErrors('''
+name: sample
+dependencies:
+  a: any
+dev_dependencies:
+  a: any
+''', [PubspecWarningCode.UNNECESSARY_DEV_DEPENDENCY]);
+  }
+
+  test_unnecessaryDevDependency_noError() {
+    assertNoErrors('''
+name: sample
+dependencies:
+  a: any
+dev_dependencies:
+  b: any
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/pubspec/pubspec_test_support.dart b/pkg/analyzer/test/src/pubspec/pubspec_test_support.dart
index e2816d5..ab9365f 100644
--- a/pkg/analyzer/test/src/pubspec/pubspec_test_support.dart
+++ b/pkg/analyzer/test/src/pubspec/pubspec_test_support.dart
@@ -10,7 +10,7 @@
 
 import '../../generated/test_support.dart';
 
-class BasePubspecValidatorTest with ResourceProviderMixin {
+class PubspecDiagnosticTest with ResourceProviderMixin {
   late PubspecValidator validator;
 
   /// Assert that when the validator is used on the given [content] the
diff --git a/pkg/analyzer/test/src/pubspec/test_all.dart b/pkg/analyzer/test/src/pubspec/test_all.dart
index d5ef1de..7acfdc5 100644
--- a/pkg/analyzer/test/src/pubspec/test_all.dart
+++ b/pkg/analyzer/test/src/pubspec/test_all.dart
@@ -4,10 +4,10 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import 'validators/test_all.dart' as validator_tests;
+import 'diagnostics/test_all.dart' as diagnostics_tests;
 
 main() {
   defineReflectiveSuite(() {
-    validator_tests.main();
+    diagnostics_tests.main();
   }, name: 'pubspec');
 }
diff --git a/pkg/analyzer/test/src/pubspec/validators/pubspec_flutter_validator_test.dart b/pkg/analyzer/test/src/pubspec/validators/pubspec_flutter_validator_test.dart
deleted file mode 100644
index 34c9489..0000000
--- a/pkg/analyzer/test/src/pubspec/validators/pubspec_flutter_validator_test.dart
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../pubspec_test_support.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(PubspecFlutterValidatorTest);
-  });
-}
-
-@reflectiveTest
-class PubspecFlutterValidatorTest extends BasePubspecValidatorTest {
-  test_assetDirectoryDoesExist_noError() {
-    newFolder('/sample/assets/logos');
-    assertNoErrors('''
-name: sample
-flutter:
-  assets:
-    - assets/logos/
-''');
-  }
-
-  test_assetDirectoryDoesNotExist_error() {
-    assertErrors('''
-name: sample
-flutter:
-  assets:
-    - assets/logos/
-''', [PubspecWarningCode.ASSET_DIRECTORY_DOES_NOT_EXIST]);
-  }
-
-  test_assetDoesNotExist_path_error() {
-    assertErrors('''
-name: sample
-flutter:
-  assets:
-    - assets/my_icon.png
-''', [PubspecWarningCode.ASSET_DOES_NOT_EXIST]);
-  }
-
-  test_assetDoesNotExist_path_inRoot_noError() {
-    newFile('/sample/assets/my_icon.png');
-    assertNoErrors('''
-name: sample
-flutter:
-  assets:
-    - assets/my_icon.png
-''');
-  }
-
-  test_assetDoesNotExist_path_inSubdir_noError() {
-    newFile('/sample/assets/images/2.0x/my_icon.png');
-    assertNoErrors('''
-name: sample
-flutter:
-  assets:
-    - assets/images/my_icon.png
-''');
-  }
-
-  @failingTest
-  test_assetDoesNotExist_uri_error() {
-    assertErrors('''
-name: sample
-flutter:
-  assets:
-    - packages/icons/my_icon.png
-''', [PubspecWarningCode.ASSET_DOES_NOT_EXIST]);
-  }
-
-  test_assetDoesNotExist_uri_noError() {
-    // TODO(brianwilkerson) Create a package named `icons` that contains the
-    // referenced file, and a `.packages` file that references that package.
-    assertNoErrors('''
-name: sample
-flutter:
-  assets:
-    - packages/icons/my_icon.png
-''');
-  }
-
-  test_assetFieldNotList_error_empty() {
-    assertErrors('''
-name: sample
-flutter:
-  assets:
-''', [PubspecWarningCode.ASSET_FIELD_NOT_LIST]);
-  }
-
-  test_assetFieldNotList_error_string() {
-    assertErrors('''
-name: sample
-flutter:
-  assets: assets/my_icon.png
-''', [PubspecWarningCode.ASSET_FIELD_NOT_LIST]);
-  }
-
-  test_assetFieldNotList_noError() {
-    newFile('/sample/assets/my_icon.png');
-    assertNoErrors('''
-name: sample
-flutter:
-  assets:
-    - assets/my_icon.png
-''');
-  }
-
-  test_assetNotString_error_int() {
-    assertErrors('''
-name: sample
-flutter:
-  assets:
-    - 23
-''', [PubspecWarningCode.ASSET_NOT_STRING]);
-  }
-
-  test_assetNotString_error_map() {
-    assertErrors('''
-name: sample
-flutter:
-  assets:
-    - my_icon:
-      default: assets/my_icon.png
-      large: assets/large/my_icon.png
-''', [PubspecWarningCode.ASSET_NOT_STRING]);
-  }
-
-  test_assetNotString_noError() {
-    newFile('/sample/assets/my_icon.png');
-    assertNoErrors('''
-name: sample
-flutter:
-  assets:
-    - assets/my_icon.png
-''');
-  }
-
-  test_flutterField_empty_noError() {
-    assertNoErrors('''
-name: sample
-flutter:
-''');
-
-    assertNoErrors('''
-name: sample
-flutter:
-
-''');
-  }
-
-  test_flutterFieldNotMap_error_bool() {
-    assertErrors('''
-name: sample
-flutter: true
-''', [PubspecWarningCode.FLUTTER_FIELD_NOT_MAP]);
-  }
-
-  test_flutterFieldNotMap_noError() {
-    newFile('/sample/assets/my_icon.png');
-    assertNoErrors('''
-name: sample
-flutter:
-  assets:
-    - assets/my_icon.png
-''');
-  }
-}
diff --git a/pkg/analyzer/test/src/pubspec/validators/test_all.dart b/pkg/analyzer/test/src/pubspec/validators/test_all.dart
deleted file mode 100644
index cd7a55c..0000000
--- a/pkg/analyzer/test/src/pubspec/validators/test_all.dart
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'pubspec_dependency_validator_test.dart'
-    as pubspec_dependency_validator_test;
-import 'pubspec_flutter_validator_test.dart' as pubspec_flutter_validator_test;
-import 'pubspec_name_validator_test.dart' as pubspec_name_validator_test;
-
-main() {
-  defineReflectiveSuite(() {
-    pubspec_dependency_validator_test.main();
-    pubspec_flutter_validator_test.main();
-    pubspec_name_validator_test.main();
-  }, name: 'validators');
-}
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 2ddaa30..4489693 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -781,7 +781,15 @@
       _writeMetadata(e);
       _writeCodeRange(e);
       _writeTypeParameterElements(e.typeParameters);
-      _writelnWithIndent('aliasedType: ${e.aliasedType}');
+
+      var aliasedType = e.aliasedType;
+      _writeType(aliasedType, name: 'aliasedType');
+      // TODO(scheglov) https://github.com/dart-lang/sdk/issues/44629
+      // TODO(scheglov) Remove it when we stop providing it everywhere.
+      if (aliasedType is FunctionType) {
+        // ignore: deprecated_member_use_from_same_package
+        expect(aliasedType.element, isNull);
+      }
 
       var aliasedElement = e.aliasedElement;
       if (aliasedElement is GenericFunctionTypeElement) {
diff --git a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
index f076a8a..a181567 100644
--- a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
+++ b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
@@ -9,7 +9,7 @@
 import '../js/js.dart' as js;
 import '../serialization/serialization.dart';
 import '../util/util.dart';
-import '../js_emitter/model.dart' show Fragment;
+import '../js_emitter/model.dart';
 
 import 'namer.dart';
 
@@ -230,7 +230,7 @@
   // Each resource has a distinct name.
   String name;
   List<Fragment> fragments;
-  Map<Entity, List<js.Property>> holderCode;
+  Map<Library, List<js.Property>> holderCode;
   js.Statement _statement;
 
   @override
@@ -507,8 +507,8 @@
   void registerHolders() {
     // Register all holders used in all [DeferredHolderResource]s.
     for (var resource in holderResources) {
-      resource.holderCode.forEach((entity, properties) {
-        String holderName = globalObjectNameForEntity(entity);
+      resource.holderCode.forEach((library, properties) {
+        String holderName = globalObjectNameForEntity(library.element);
         registerHolderUseOrUpdate(resource.name, holderName,
             properties: properties);
       });
@@ -769,7 +769,7 @@
   final List<DeferredHolderResource> holderResources = [];
   final Set<String> _uniqueHolders = {};
   final List<String> _holders = [];
-  final Map<Entity, String> _entityMap = {};
+  final Map<Library, String> _libraryMap = {};
   final JCommonElements _commonElements;
 
   LegacyDeferredHolderExpressionFinalizerImpl(this._commonElements) {
@@ -844,9 +844,9 @@
   /// Registers an [Entity] with a specific [holder].
   void registerHolderUse(String holder, Object data) {
     if (_uniqueHolders.add(holder)) _holders.add(holder);
-    if (data != null && data is Entity) {
-      assert(!_entityMap.containsKey(data) || _entityMap[data] == holder);
-      _entityMap[data] = holder;
+    if (data != null && data is Library) {
+      assert(!_libraryMap.containsKey(data) || _libraryMap[data] == holder);
+      _libraryMap[data] = holder;
     }
   }
 
@@ -890,9 +890,9 @@
 
   /// Registers all of the holders used by a given [DeferredHolderResource].
   void registerHolders(DeferredHolderResource resource) {
-    for (var entity in resource.holderCode.keys) {
-      var holder = globalObjectForEntity(entity);
-      registerHolderUse(holder, entity);
+    for (var library in resource.holderCode.keys) {
+      var holder = globalObjectForLibrary(library.element);
+      registerHolderUse(holder, library);
     }
   }
 
@@ -917,9 +917,9 @@
     }
 
     final holderCode = resource.holderCode;
-    holderCode.forEach((entity, properties) {
-      assert(_entityMap.containsKey(entity));
-      var holder = _entityMap[entity];
+    holderCode.forEach((library, properties) {
+      assert(_libraryMap.containsKey(library));
+      var holder = _libraryMap[library];
       assert(codePerHolder.containsKey(holder));
       codePerHolder[holder].addAll(properties);
     });
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index 78f3727..9f40195 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -824,7 +824,7 @@
 
   /// Adds code to a finalizer.
   void addCodeToFinalizer(void Function(js.Node) addCode, js.Node fragmentCode,
-      Map<Entity, List<js.Property>> holderCode) {
+      Map<Library, List<js.Property>> holderCode) {
     addCode(fragmentCode);
     for (var properties in holderCode.values) {
       for (var property in properties) {
@@ -836,7 +836,7 @@
   /// Finalizes the code for a fragment, and optionally finalizes holders.
   /// Finalizing holders must be the last step of the emitter.
   void finalizeCode(String resourceName, js.Node code,
-      Map<Entity, List<js.Property>> holderCode,
+      Map<Library, List<js.Property>> holderCode,
       {bool finalizeHolders: false}) {
     StringReferenceFinalizer stringFinalizer =
         StringReferenceFinalizerImpl(_options.enableMinification);
@@ -868,23 +868,21 @@
   /// into a map keyed by [Entity] because we don't yet know anything about the
   /// structure of the underlying holders and thus we cannot emit this code
   /// directly into the ast.
-  Map<Entity, List<js.Property>> emitHolderCode(List<Library> libraries) {
-    Map<Entity, List<js.Property>> holderCode = {};
+  Map<Library, List<js.Property>> emitHolderCode(List<Library> libraries) {
+    Map<Library, List<js.Property>> holderCode = {};
     for (Library library in libraries) {
       for (StaticMethod method in library.statics) {
         Map<js.Name, js.Expression> propertyMap = emitStaticMethod(method);
         propertyMap.forEach((js.Name key, js.Expression value) {
           var property = new js.Property(js.quoteName(key), value);
-          Entity holderKey =
-              method is StaticStubMethod ? method.library : method.element;
-          (holderCode[holderKey] ??= []).add(property);
+          (holderCode[library] ??= []).add(property);
           registerEntityAst(method.element, property, library: library.element);
         });
       }
       for (Class cls in library.classes) {
         js.Expression constructor = emitConstructor(cls);
         var property = new js.Property(js.quoteName(cls.name), constructor);
-        (holderCode[cls.element] ??= []).add(property);
+        (holderCode[library] ??= []).add(property);
         registerEntityAst(cls.element, property, library: library.element);
       }
     }
diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart
index 3b476e4..5027f18 100644
--- a/pkg/dartdev/lib/src/commands/compile.dart
+++ b/pkg/dartdev/lib/src/commands/compile.dart
@@ -5,6 +5,7 @@
 import 'dart:async';
 import 'dart:io';
 
+import 'package:args/args.dart';
 import 'package:dart2native/generate.dart';
 import 'package:front_end/src/api_prototype/compiler_options.dart'
     show Verbosity;
@@ -66,89 +67,28 @@
 class CompileJSCommand extends CompileSubcommandCommand {
   static const String cmdName = 'js';
 
-  CompileJSCommand({bool verbose})
-      : super(cmdName, 'Compile Dart to JavaScript.', verbose) {
-    argParser
-      ..addOption(
-        commonOptions['outputFile'].flag,
-        help: commonOptions['outputFile'].help,
-        abbr: commonOptions['outputFile'].abbr,
-        defaultsTo: commonOptions['outputFile'].defaultsTo,
-      )
-      ..addOption(
-        commonOptions['verbosity'].flag,
-        help: commonOptions['verbosity'].help,
-        abbr: commonOptions['verbosity'].abbr,
-        defaultsTo: commonOptions['verbosity'].defaultsTo,
-        allowed: commonOptions['verbosity'].allowed,
-        allowedHelp: commonOptions['verbosity'].allowedHelp,
-      )
-      ..addFlag(
-        'minified',
-        help: 'Generate minified output.',
-        abbr: 'm',
-        negatable: false,
-      )
-      ..addMultiOption('define', abbr: 'D', valueHelp: 'key=value', help: '''
-Define an environment declaration. To specify multiple declarations, use multiple options or use commas to separate key-value pairs.
-For example: dart compile $cmdName -Da=1,b=2 main.dart''');
+  /// Accept all flags so we can delegate arg parsing to dart2js internally.
+  @override
+  final ArgParser argParser = ArgParser.allowAnything();
 
-    addExperimentalFlags(argParser, verbose);
-  }
+  CompileJSCommand({bool verbose})
+      : super(cmdName, 'Compile Dart to JavaScript.', verbose);
 
   @override
   String get invocation => '${super.invocation} <dart entry point>';
 
   @override
   FutureOr<int> run() async {
-    if (!Sdk.checkArtifactExists(sdk.dart2jsSnapshot)) {
-      return 255;
-    }
-    final String librariesPath = path.absolute(
-      sdk.sdkPath,
-      'lib',
-      'libraries.json',
-    );
+    if (!Sdk.checkArtifactExists(sdk.dart2jsSnapshot)) return 255;
 
-    if (!Sdk.checkArtifactExists(librariesPath)) {
-      return 255;
-    }
+    final librariesPath = path.absolute(sdk.sdkPath, 'lib', 'libraries.json');
 
-    // We expect a single rest argument; the dart entry point.
-    if (argResults.rest.length != 1) {
-      // This throws.
-      usageException('Missing Dart entry point.');
-    }
-
-    final String sourcePath = argResults.rest[0];
-    if (!checkFile(sourcePath)) {
-      return 1;
-    }
-    final args = <String>[
-      '--libraries-spec=$librariesPath',
-      if (argResults.enabledExperiments.isNotEmpty)
-        "--enable-experiment=${argResults.enabledExperiments.join(',')}",
-      if (argResults.wasParsed(commonOptions['outputFile'].flag))
-        "-o${argResults[commonOptions['outputFile'].flag]}",
-      if (argResults.wasParsed('minified')) '-m',
-    ];
-
-    if (argResults.wasParsed('define')) {
-      for (final define in argResults['define']) {
-        args.add('-D$define');
-      }
-    }
-
-    // Add any args that weren't parsed to the end. This will likely only ever
-    // be the script name.
-    args.addAll(argResults.rest);
+    if (!Sdk.checkArtifactExists(librariesPath)) return 255;
 
     VmInteropHandler.run(
         sdk.dart2jsSnapshot,
         [
           '--libraries-spec=$librariesPath',
-          if (argResults.enabledExperiments.isNotEmpty)
-            "--enable-experiment=${argResults.enabledExperiments.join(',')}",
           '--cfe-invocation-modes=compile',
           ...argResults.arguments,
         ],
@@ -357,9 +297,7 @@
   static const String cmdName = 'compile';
   CompileCommand({bool verbose = false})
       : super(cmdName, 'Compile Dart to various formats.', verbose) {
-    addSubcommand(CompileJSCommand(
-      verbose: verbose,
-    ));
+    addSubcommand(CompileJSCommand(verbose: verbose));
     addSubcommand(CompileSnapshotCommand(
       commandName: CompileSnapshotCommand.jitSnapshotCmdName,
       help: 'to a JIT snapshot.',
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index c5e44a7..4675cb9 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
-import 'package:analyzer/error/error.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:nnbd_migration/nnbd_migration.dart';
 import 'package:test/test.dart';
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 0cec1c2..9040385 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -5011,20 +5011,7 @@
   void Trace(Serializer* s, ObjectPtr object) {
     LinkedHashMapPtr map = LinkedHashMap::RawCast(object);
     objects_.Add(map);
-
-    s->Push(map->untag()->type_arguments_);
-
-    intptr_t used_data = Smi::Value(map->untag()->used_data_);
-    ArrayPtr data_array = map->untag()->data_;
-    ObjectPtr* data_elements = data_array->untag()->data();
-    for (intptr_t i = 0; i < used_data; i += 2) {
-      ObjectPtr key = data_elements[i];
-      if (key != data_array) {
-        ObjectPtr value = data_elements[i + 1];
-        s->Push(key);
-        s->Push(value);
-      }
-    }
+    PushFromTo(map);
   }
 
   void WriteAlloc(Serializer* s) {
@@ -5041,26 +5028,7 @@
     for (intptr_t i = 0; i < count; i++) {
       LinkedHashMapPtr map = objects_[i];
       AutoTraceObject(map);
-
-      WriteField(map, type_arguments_);
-
-      const intptr_t used_data = Smi::Value(map->untag()->used_data_);
-      ASSERT((used_data & 1) == 0);  // Keys + values, so must be even.
-      const intptr_t deleted_keys = Smi::Value(map->untag()->deleted_keys_);
-
-      // Write out the number of (not deleted) key/value pairs that will follow.
-      s->Write<int32_t>((used_data >> 1) - deleted_keys);
-
-      ArrayPtr data_array = map->untag()->data_;
-      ObjectPtr* data_elements = data_array->untag()->data();
-      for (intptr_t i = 0; i < used_data; i += 2) {
-        ObjectPtr key = data_elements[i];
-        if (key != data_array) {
-          ObjectPtr value = data_elements[i + 1];
-          s->WriteElementRef(key, i);
-          s->WriteElementRef(value, i + 1);
-        }
-      }
+      WriteFromTo(map);
     }
   }
 
@@ -5081,41 +5049,12 @@
   }
 
   void ReadFill(Deserializer* d, bool primary) {
-    PageSpace* old_space = d->heap()->old_space();
-
     for (intptr_t id = start_index_; id < stop_index_; id++) {
       LinkedHashMapPtr map = static_cast<LinkedHashMapPtr>(d->Ref(id));
       Deserializer::InitializeHeader(map, kLinkedHashMapCid,
                                      LinkedHashMap::InstanceSize(),
                                      primary && is_canonical());
-
-      map->untag()->type_arguments_ =
-          static_cast<TypeArgumentsPtr>(d->ReadRef());
-
-      // TODO(rmacnak): Reserve ref ids and co-allocate in ReadAlloc.
-      intptr_t pairs = d->Read<int32_t>();
-      intptr_t used_data = pairs << 1;
-      intptr_t data_size = Utils::Maximum(
-          Utils::RoundUpToPowerOfTwo(used_data),
-          static_cast<uintptr_t>(LinkedHashMap::kInitialIndexSize));
-
-      ArrayPtr data = static_cast<ArrayPtr>(
-          old_space->AllocateSnapshot(Array::InstanceSize(data_size)));
-      data->untag()->type_arguments_ = TypeArguments::null();
-      data->untag()->length_ = Smi::New(data_size);
-      intptr_t i;
-      for (i = 0; i < used_data; i++) {
-        data->untag()->data()[i] = d->ReadRef();
-      }
-      for (; i < data_size; i++) {
-        data->untag()->data()[i] = Object::null();
-      }
-
-      map->untag()->index_ = TypedData::null();
-      map->untag()->hash_mask_ = Smi::New(0);
-      map->untag()->data_ = data;
-      map->untag()->used_data_ = Smi::New(used_data);
-      map->untag()->deleted_keys_ = Smi::New(0);
+      ReadFromTo(map);
     }
   }
 };
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 7c75e83..19e2383 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -3097,6 +3097,7 @@
   POINTER_FIELD(SmiPtr, used_data)
   POINTER_FIELD(SmiPtr, deleted_keys)
   VISIT_TO(deleted_keys)
+  ObjectPtr* to_snapshot(Snapshot::Kind kind) { return to(); }
 
   friend class SnapshotReader;
 };
diff --git a/tools/VERSION b/tools/VERSION
index 45803c1d..b336d1d 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 231
+PRERELEASE 232
 PRERELEASE_PATCH 0
\ No newline at end of file
