Version 3.5.0-218.0.dev

Merge 87239aa8ecbc479d08de8a34ed09f183c27136f6 into dev
diff --git a/DEPS b/DEPS
index 042ca37..1a30a22 100644
--- a/DEPS
+++ b/DEPS
@@ -120,19 +120,19 @@
   # EOL comment after a dependency to disable this and pin it at its current
   # revision.
 
-  "args_rev": "b3608bd95168428621689dce62f873b76a1617d4",
-  "async_rev": "f933ddff63021bfbdb70938d6a137eb9e7419b05",
-  "bazel_worker_rev": "2ec90c023d7c62a38cfbd2f34f55093ab38ccf85",
-  "benchmark_harness_rev": "6fa42b072694875823bd81cb0913a9409e018e5f",
-  "boolean_selector_rev": "84467e580fa1c7c53ea588308f1acbcf4e8eb6a6",
-  "browser_launcher_rev": "0dcf2246c11eaf6c4f2591332f1057734a847793",
+  "args_rev": "6a5a2e6b1f0020b873c7ffbdd36a784c4f9ee300",
+  "async_rev": "4073129914f14d0c3bdc295bacd7dca5229872af",
+  "bazel_worker_rev": "c76d7c86381a6ed594641ba03b55c65b84ee11a6",
+  "benchmark_harness_rev": "f6ef33dc88d7cbc9e4a8a087f1e652eb0d6cc254",
+  "boolean_selector_rev": "62f82f6a333b419b457e62cadc17b7a9c0545873",
+  "browser_launcher_rev": "7348ceae6508e5350771979c2951a54313303416",
   "characters_rev": "7633a16a22c626e19ca750223237396315268a06",
-  "cli_util_rev": "9fe3eeb8a2fad6da9a156055207337474436da12",
-  "clock_rev": "80e70acf72cc3a876d3158911b097b581cd8fd1a",
-  "collection_rev": "fe2e80039b6d44d80f7465535988f935ccf554a5",
-  "convert_rev": "056626e0cddd56c4cc1184aac787ba06ecdaae3a",
-  "crypto_rev": "3f815aca8ad5020bb39be09ec9bfd75c36910809",
-  "csslib_rev": "141dd6567651500bb8c17ccb65e3c9e117c64035",
+  "cli_util_rev": "c37d5e14f50e72a268c1ad86149cecfa4b58c494",
+  "clock_rev": "7cbf08e36a92f14f22132d255846610c1b065324",
+  "collection_rev": "586a5e841fad5572beae421ef9902ba7ceab1292",
+  "convert_rev": "302af1b7d7dffe5bc1f85a6f1b0958b9de920cd7",
+  "crypto_rev": "0a10171a7983cd84b318edf3086f751542500a13",
+  "csslib_rev": "23c314bb6b247a71348cfb0987ba0eb29574abb6",
   # Note: Updates to dart_style have to be coordinated with the infrastructure
   # team so that the internal formatter `tools/sdks/dart-sdk/bin/dart format`
   # matches the version here. Please follow this process to make updates:
@@ -144,58 +144,58 @@
   #
   # For more details, see https://github.com/dart-lang/sdk/issues/30164.
   "dart_style_rev": "a6ad7693555a9add6f98ad6fd94de80d35c89415", # disable tools/rev_sdk_deps.dart
-  "dartdoc_rev": "ed975850ec97bbccba1c5c2a997e2c085ef842da",
-  "ecosystem_rev": "ad9da1557bbf522ff5bd25aa83117aeb818160c9",
-  "file_rev": "8ce0d13ffe9dac267bdbd6c65c145ba4f611af72",
-  "fixnum_rev": "ac892adead8317e22fafaec65a4e76bda1640f26",
+  "dartdoc_rev": "45627f92f7e4d377930925ea1ea6a3ed808b34cd",
+  "ecosystem_rev": "bc25c0cb80415fb711b9413d809c23fad9635616",
+  "file_rev": "07cacaed6679a173e29176747e6ce0325742749f",
+  "fixnum_rev": "a8157d87f17d5184e210403f2ed63d354b854132",
   "flute_rev": "a531c96a8b43d015c6bfbbfe3ab54867b0763b8b",
-  "glob_rev": "ee48ea82a1ccb64c8cc62e9f4f44c44ca67add71",
-  "html_rev": "00d34611eee5eff976bd12a631357a4d591ef5fb",
-  "http_rev": "6337ee3f6d1f641192ba40e133f27085c69aa815",
-  "http_multi_server_rev": "4a791af861da1cf53b57d9928fbc605f57139e4f",
-  "http_parser_rev": "702698a3fc726f7cbb8cd7824a8639c7fe84b169",
+  "glob_rev": "eaec6a448576048b748475d80bfac2795ad5a267",
+  "html_rev": "3bc803d7e655491b243418f19300ef0c6112bcea",
+  "http_rev": "7bfbeea6324e3dd34b93d3b4756df0c03bf243f4",
+  "http_multi_server_rev": "25941e260658efb324de857e6022f418faf9bdd1",
+  "http_parser_rev": "551e0e470bc7406f5400c55b6f95ee205ad18825",
   "intl_rev": "5d65e3808ce40e6282e40881492607df4e35669f",
-  "json_rpc_2_rev": "3187f7b59ed253d14b2560c5306b037bca6817b0",
+  "json_rpc_2_rev": "5b1cbd679756700d5f319bf10a217da53e98ea52",
   "leak_tracker_rev": "f5620600a5ce1c44f65ddaa02001e200b096e14c", # manually rolled
-  "lints_rev": "b254c7e374b0328d4ebfe4f32638fd5e58a81b59",
-  "logging_rev": "7f722dcbe541de330b5ebc1e9ae075e92033aa06",
-  "markdown_rev": "c1013dc6fc2653baeb9fac70d0a036615867e629",
-  "matcher_rev": "4ac4096facce24a781ab6609ca99995aeb443b25",
+  "lints_rev": "baaaa5616370243c3c8c6a9f67fb83d26bdac552",
+  "logging_rev": "73f043a45b23bb6d397b5ac784cf562e9ccb295b",
+  "markdown_rev": "3d8d7a8f14b74bb646bb6e4ae35e0bf2beb74154",
+  "matcher_rev": "0abd4054c47a923486a6c0c04b5c974ba13ad2da",
   "material_color_utilities_rev": "799b6ba2f3f1c28c67cc7e0b4f18e0c7d7f3c03e",
-  "mime_rev": "b01c9a24e0991da479bd405138be3b3e403ff456",
+  "mime_rev": "8d2d559240ad76c8c2d231bcee0d89cf0ea3edc6",
   "mockito_rev": "2302814df66e651b6710311366501523dbee2e11",
   "native_rev": "fef40aebc3cf34654919e8a5785b6c50b3ea445c", # mosum@ and dacoharkes@ are rolling breaking changes manually while the assets features are in experimental.
-  "package_config_rev": "39096768806ccae4b7025dd4114f15f2df424b0c",
-  "path_rev": "aea50fa0e997e0401ea271783dddd364ce72f924",
-  "pool_rev": "1a6f2df19d7a24baaf674e032a0310a4f76725de",
+  "package_config_rev": "903a0e528f91aef90821c8f5eaafbc1ae27198ab",
+  "path_rev": "8fc4c72415f254b953b17929b56283cceb3dc5c4",
+  "pool_rev": "88e463600c636a0d8cdb5dc306524ebf04b06baf",
   "protobuf_rev": "ccf104dbc36929c0f8708285d5f3a8fae206343e",
   "pub_rev": "75ab224376e80e918d3c53494a36d4bf8a2f2af6", # disable tools/rev_sdk_deps.dart
-  "pub_semver_rev": "f57c9c31dfd4e45ce6b11f18ee388e526ba1792a",
-  "shelf_rev": "338962c5a80761ca60921fc9c9b3e6ff57ffc82c",
-  "source_map_stack_trace_rev": "6834af5e9e4ba880741b1357a5967fee8d90827c",
-  "source_maps_rev": "181a41c10668801486c53b48d6fce42fea5c9eca",
-  "source_span_rev": "e80cb44fc0f8d284e86372c9c98bbdd958810beb",
-  "sse_rev": "1bb0a98da769793efe7495e08c947515dc48e42e",
-  "stack_trace_rev": "4d346f70990f3e2fe1fbfbbaa537b9ae8760f25e",
-  "stream_channel_rev": "61ad87242146c54cbe90f1cb436e830ae873925b",
-  "string_scanner_rev": "32468bdd9a2baefe2fbcae31ac21daca9e2a8bde",
-  "sync_http_rev": "82553db87ae0292d4cb35aa9db6ea2a5451fcb92",
+  "pub_semver_rev": "a9025f3cc23ebb0f86c0af8759d95306b9133ce0",
+  "shelf_rev": "ea3c983a1e721acf5e7e42a4d3ade65b9ccf51a9",
+  "source_map_stack_trace_rev": "96a8213dacf7cd42aefb1311491a4169826f98d2",
+  "source_maps_rev": "caa79c2011015759c6cf3299f299f5cccdf8bb61",
+  "source_span_rev": "59a3903521dbf4c38c77df73669e73174a170327",
+  "sse_rev": "7dcde164d5bfe707441f206379ef33e7509e2aac",
+  "stack_trace_rev": "ab09060b82c936c38c04eb49c1154b83f6648349",
+  "stream_channel_rev": "b41ff7a25395ace8b23e454e3d1a3459a71306ca",
+  "string_scanner_rev": "7b37c1b3d1ca6b581792e6ba385f651573af4a45",
+  "sync_http_rev": "7622bdd07501f3f279212e355325b7c84a2b0a08",
   "tar_rev": "b62573f39a4de28f69d9ed82b02fbd96b12b9633",
-  "term_glyph_rev": "a46b48bd28c724e3cd6c18464e1d5ce823601488",
+  "term_glyph_rev": "c86e8171ee7e9f6fc8e775e0be755a603dd0b72d",
   "test_rev": "2464ad5c5945c98edd33fb69b3616a14771f1c8d",
-  "test_descriptor_rev": "d61bf6cbccf8020d4dd2f1d8c91fb21c4be16290",
-  "test_process_rev": "4ab3f1cedd4b5d971fd78bbccbce97de43be52b7",
-  "test_reflective_loader_rev": "f8807e0e5816e30ab592424e3916fee90b90623e",
+  "test_descriptor_rev": "b23d7ccb0f9882e161fb4dea75b2237bf428432b",
+  "test_process_rev": "862eaf3b825f5e97b278d84a2afbe81b3e8a1683",
+  "test_reflective_loader_rev": "816942eaeeac30cc59d8699f1e94ad779cc53c06",
   "tools_rev": "86b3661fc4ccbcda5b662ff3075177448eeeba11",
-  "typed_data_rev": "fb1958ca880d650972e124222d3d9e41bd35c76c",
-  "vector_math_rev": "43f2a77bb0be812b027a68a11792d563713b42a1",
-  "watcher_rev": "c182cd3db6f0bc285bf5da52df422f5c64f21a37",
+  "typed_data_rev": "d14f9654f7a5d6baa7dcc27691bd0fa56769fb67",
+  "vector_math_rev": "3c03ac3b370f6d11d943d3f5a933ba6cf2526d85",
+  "watcher_rev": "c00fc2a6cd869cdebbc52e00af3d912d25745729",
   "web_rev": "d7766451f43001276b5493b2261d2973702b8334", # b/343654390
   "web_socket_channel_rev": "45b8ce9ce9fb5194a24d3dff8913c573fbe7896a",
   "webdev_rev": "a97c2a1f074209584e7a6a4923d2ca029411f718",
   "webdriver_rev": "f85779edd7c9f66198d4391ed3631db1d97a5b11",
   "webkit_inspection_protocol_rev": "5740cc91eaeb13a02007b77b128fccf4b056db6e",
-  "yaml_rev": "8fb8147e40236bdefd02abbca7b92ddfd7ca0749",
+  "yaml_rev": "7873b3fb9f16ec83bc7778fed58615fa91f1f042",
   "yaml_edit_rev": "963e7a31efc7e2f24e409f239106f1ed1c6fee35",
 
   # Windows deps
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 268a8e1..5654df8 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -17642,17 +17642,6 @@
 );
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeWasmImportOrExportInUserCode =
-    messageWasmImportOrExportInUserCode;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageWasmImportOrExportInUserCode = const MessageCode(
-  "WasmImportOrExportInUserCode",
-  problemMessage:
-      r"""Pragmas `wasm:import` and `wasm:export` are for internal use only and cannot be used by user code.""",
-);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeWeakReferenceMismatchReturnAndArgumentTypes =
     messageWeakReferenceMismatchReturnAndArgumentTypes;
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart
index 1a0e4da..1c92ceb 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_semantic_tokens.dart
@@ -32,13 +32,14 @@
 
   Future<List<SemanticTokenInfo>> getServerResult(
       String path, SourceRange? range) async {
-    var result = await server.getResolvedUnit(path);
-    var unit = result?.unit;
-    if (unit != null) {
-      var computer = DartUnitHighlightsComputer(unit, range: range);
-      return computer.computeSemanticTokens();
-    }
-    return [];
+    var result = await requireResolvedUnit(path);
+    return result.map(
+      (_) => [], // Error, return nothing.
+      (unit) {
+        var computer = DartUnitHighlightsComputer(unit.unit, range: range);
+        return computer.computeSemanticTokens();
+      },
+    );
   }
 
   Iterable<SemanticTokenInfo> _filter(
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
index e26ec10..66ec27c 100644
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
@@ -45,8 +45,8 @@
 #
 # Stats:
 # -  42 "needsEvaluation"
-# - 352 "needsFix"
-# - 399 "hasFix"
+# - 351 "needsFix"
+# - 400  "hasFix"
 # - 516 "noFix"
 
 AnalysisOptionsErrorCode.INCLUDED_FILE_PARSE_ERROR:
@@ -2863,9 +2863,7 @@
 ParserErrorCode.FINAL_CONSTRUCTOR:
   status: hasFix
 ParserErrorCode.FINAL_ENUM:
-  status: needsFix
-  notes: |-
-    Remove the `final` keyword.
+  status: hasFix
 ParserErrorCode.FINAL_METHOD:
   status: needsFix
   notes: |-
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index b378185..31c7776 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -1378,6 +1378,9 @@
   ParserErrorCode.EXTRANEOUS_MODIFIER: [
     RemoveExtraModifier.new,
   ],
+  ParserErrorCode.FINAL_ENUM: [
+    RemoveExtraModifier.new,
+  ],
   ParserErrorCode.FINAL_CONSTRUCTOR: [
     RemoveExtraModifier.new,
   ],
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index 438604f..ba21ef8 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:async';
+
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analysis_server/src/legacy_analysis_server.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
@@ -721,6 +723,20 @@
     await _initializeAndVerifyTokens(content, expected);
   }
 
+  Future<void> test_emptyAnalysisRoots_handlesFileRequestsImmediately() async {
+    var content = '''
+// test
+''';
+
+    var code = TestCode.parse(content);
+    newFile(mainFilePath, code.code);
+    await initialize(allowEmptyRootUri: true);
+
+    unawaited(openFile(mainFileUri, code.code));
+    var tokens = await getSemanticTokens(mainFileUri);
+    expect(tokens.data, isNotEmpty);
+  }
+
   Future<void> test_extension() async {
     var content = '''
 extension A on String {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_extra_modifier_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_extra_modifier_test.dart
index 45f5682..d2f6351 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_extra_modifier_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_extra_modifier_test.dart
@@ -186,6 +186,15 @@
 ''');
   }
 
+  Future<void> test_finalEnum() async {
+    await resolveTestCode(r'''
+final enum E {e}
+''');
+    await assertHasFix('''
+enum E {e}
+''');
+  }
+
   Future<void> test_invalidAsyncConstructorModifier() async {
     await resolveTestCode(r'''
 class A {
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 3a2d1db..2bb2bfc 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -4196,6 +4196,7 @@
     debugEvent("ExpressionFunctionBody");
 
     var expression = pop() as ExpressionImpl;
+    reportErrorIfSuper(expression);
     var star = pop() as Token?;
     var asyncKeyword = pop() as Token?;
     if (parseFunctionBodies) {
diff --git a/pkg/analyzer/test/generated/error_parser_test.dart b/pkg/analyzer/test/generated/error_parser_test.dart
index 1e14366..f95e5cb 100644
--- a/pkg/analyzer/test/generated/error_parser_test.dart
+++ b/pkg/analyzer/test/generated/error_parser_test.dart
@@ -1865,6 +1865,18 @@
     parseExpression("x(y)(z).a++");
   }
 
+  void test_missingAssignableSelector_superAsExpressionFunctionBody() {
+    CompilationUnit unit = parseCompilationUnit('main() => super;', errors: [
+      error(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 10, 5),
+    ]);
+    var declaration = unit.declarations.first as FunctionDeclaration;
+    var body = declaration.functionExpression.body as ExpressionFunctionBody;
+    var expression = body.expression;
+    expect(expression, isSuperExpression);
+    var superExpression = expression as SuperExpression;
+    expect(superExpression.superKeyword, isNotNull);
+  }
+
   void test_missingAssignableSelector_superPrimaryExpression() {
     CompilationUnit unit = parseCompilationUnit('main() {super;}', errors: [
       expectedError(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 8, 5)
diff --git a/pkg/dart2wasm/lib/target.dart b/pkg/dart2wasm/lib/target.dart
index 9ddd59b..5e45646 100644
--- a/pkg/dart2wasm/lib/target.dart
+++ b/pkg/dart2wasm/lib/target.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:_fe_analyzer_shared/src/messages/codes.dart'
-    show Message, LocatedMessage, messageWasmImportOrExportInUserCode;
+    show Message, LocatedMessage;
 import 'package:_js_interop_checks/js_interop_checks.dart';
 import 'package:_js_interop_checks/src/js_interop.dart' as jsInteropHelper;
 import 'package:_js_interop_checks/src/transformations/shared_interop_transformer.dart';
@@ -243,11 +243,6 @@
       ReferenceFromIndex? referenceFromIndex,
       {void Function(String msg)? logger,
       ChangedStructureNotifier? changedStructureNotifier}) {
-    // Check `wasm:import` and `wasm:export` pragmas before FFI transforms as
-    // FFI transforms convert JS interop annotations to these pragmas.
-    _checkWasmImportExportPragmas(libraries, coreTypes,
-        diagnosticReporter as DiagnosticReporter<Message, LocatedMessage>);
-
     Set<Library> transitiveImportingJSInterop = {
       ...jsInteropHelper.calculateTransitiveImportsOfJsInteropIfUsed(
           component, Uri.parse("package:js/js.dart")),
@@ -523,49 +518,3 @@
     return false;
   }
 }
-
-final _dartCoreUri = Uri.parse('dart:core');
-
-/// Check that `wasm:import` and `wasm:export` pragmas are only used in `dart:`
-/// libraries and in tests, with the exception of
-/// `reject_import_export_pragmas` test.
-void _checkWasmImportExportPragmas(List<Library> libraries, CoreTypes coreTypes,
-    DiagnosticReporter<Message, LocatedMessage> diagnosticReporter) {
-  for (Library library in libraries) {
-    final importUri = library.importUri;
-    if (importUri.isScheme('dart') ||
-        (importUri.path.contains('tests/web/wasm') &&
-            !importUri.path.contains('reject_import_export_pragmas'))) {
-      continue;
-    }
-
-    for (Member member in library.members) {
-      for (Expression annotation in member.annotations) {
-        if (annotation is! ConstantExpression) {
-          continue;
-        }
-        final annotationConstant = annotation.constant;
-        if (annotationConstant is! InstanceConstant) {
-          continue;
-        }
-        final cls = annotationConstant.classNode;
-        if (cls.name == 'pragma' &&
-            cls.enclosingLibrary.importUri == _dartCoreUri) {
-          final pragmaName = annotationConstant
-              .fieldValues[coreTypes.pragmaName.fieldReference];
-          if (pragmaName is StringConstant) {
-            if (pragmaName.value == 'wasm:import' ||
-                pragmaName.value == 'wasm:export') {
-              diagnosticReporter.report(
-                messageWasmImportOrExportInUserCode,
-                annotation.fileOffset,
-                0,
-                library.fileUri,
-              );
-            }
-          }
-        }
-      }
-    }
-  }
-}
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 32ac127..0fc61fd 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -1115,8 +1115,6 @@
 VarAsTypeName/script1: Fail # Too many problems
 VariableCouldBeNullDueToWrite/analyzerCode: Fail
 VariableCouldBeNullDueToWrite/example: Fail
-WasmImportOrExportInUserCode/analyzerCode: Fail
-WasmImportOrExportInUserCode/example: Fail
 WeakReferenceMismatchReturnAndArgumentTypes/analyzerCode: Fail
 WeakReferenceMismatchReturnAndArgumentTypes/example: Fail
 WeakReferenceNotOneArgument/analyzerCode: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index e96affc..d5d7dfe 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -7011,9 +7011,6 @@
 ResourceIdentifiersMultiple:
   problemMessage: "Only one resource identifier pragma can be used at a time."
 
-WasmImportOrExportInUserCode:
-  problemMessage: "Pragmas `wasm:import` and `wasm:export` are for internal use only and cannot be used by user code."
-
 WeakReferenceNotStatic:
   problemMessage: "Weak reference pragma can be used on a static method only."
 
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index a6f6b3f..92d5410 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -114,7 +114,6 @@
 pointer`s
 pragma
 pragma('vm:deeply
-pragmas
 preexisting
 pubspec.yaml
 r
@@ -150,6 +149,4 @@
 unavailable
 unsound
 v
-wasm:export
-wasm:import
 x
diff --git a/pkg/linter/test/rules/all.dart b/pkg/linter/test/rules/all.dart
index fdf2415..9590e3d 100644
--- a/pkg/linter/test/rules/all.dart
+++ b/pkg/linter/test/rules/all.dart
@@ -28,6 +28,8 @@
 import 'avoid_final_parameters_test.dart' as avoid_final_parameters;
 import 'avoid_function_literals_in_foreach_calls_test.dart'
     as avoid_function_literals_in_foreach_calls;
+import 'avoid_implementing_value_types_test.dart'
+    as avoid_implementing_value_types;
 import 'avoid_init_to_null_test.dart' as avoid_init_to_null;
 import 'avoid_multiple_declarations_per_line_test.dart'
     as avoid_multiple_declarations_per_line;
@@ -295,6 +297,7 @@
   avoid_field_initializers_in_non_const_classes.main();
   avoid_final_parameters.main();
   avoid_function_literals_in_foreach_calls.main();
+  avoid_implementing_value_types.main();
   avoid_init_to_null.main();
   avoid_multiple_declarations_per_line.main();
   avoid_positional_boolean_parameters.main();
diff --git a/pkg/linter/test/rules/avoid_classes_with_only_static_members_test.dart b/pkg/linter/test/rules/avoid_classes_with_only_static_members_test.dart
index 8c804f5..31816cb 100644
--- a/pkg/linter/test/rules/avoid_classes_with_only_static_members_test.dart
+++ b/pkg/linter/test/rules/avoid_classes_with_only_static_members_test.dart
@@ -100,6 +100,12 @@
     ]);
   }
 
+  test_class_empty() async {
+    await assertNoDiagnostics(r'''
+class C {}
+''');
+  }
+
   test_class_empty_augmentation_empty() async {
     var a = newFile('$testPackageLibPath/a.dart', r'''
 import augment 'b.dart';
@@ -120,6 +126,62 @@
     await assertNoDiagnosticsIn(errors);
   }
 
+  test_class_extendingValidClass() async {
+    await assertNoDiagnostics(r'''
+class A {
+  int f = 1;
+}
+
+class C extends A {
+  static int i = 0;
+  static m() {}
+}
+''');
+  }
+
+  test_class_noPublicConstructor() async {
+    await assertNoDiagnostics(r'''
+class C {
+  C._();
+  static int f = 0;
+}
+''');
+  }
+
+  test_class_withConstructor() async {
+    await assertNoDiagnostics(r'''
+class C {
+  C();
+}
+''');
+  }
+
+  test_class_withInstanceField() async {
+    await assertNoDiagnostics(r'''
+class C {
+  int a = 0;
+}
+''');
+  }
+
+  test_class_withInstanceMethod() async {
+    await assertNoDiagnostics(r'''
+class C {
+  void m() {}
+}
+''');
+  }
+
+  test_class_withStaticConstFields() async {
+    await assertNoDiagnostics(r'''
+class C {
+  static const red = '#f00';
+  static const green = '#0f0';
+  static const blue = '#00f';
+}
+''');
+  }
+
   test_finalClass() async {
     await assertDiagnostics(r'''
 final class C {
diff --git a/pkg/linter/test/rules/avoid_implementing_value_types_test.dart b/pkg/linter/test/rules/avoid_implementing_value_types_test.dart
new file mode 100644
index 0000000..e958789
--- /dev/null
+++ b/pkg/linter/test/rules/avoid_implementing_value_types_test.dart
@@ -0,0 +1,86 @@
+// 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 '../rule_test_support.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AvoidImplementingValueTypesTest);
+  });
+}
+
+@reflectiveTest
+class AvoidImplementingValueTypesTest extends LintRuleTest {
+  @override
+  String get lintRule => 'avoid_implementing_value_types';
+
+  test_classMixinInMixinWithEqualEqual() async {
+    await assertNoDiagnostics(r'''
+mixin M {
+  @override
+  bool operator ==(Object o) => false;
+}
+
+class C with M {}
+''');
+  }
+
+  test_declaresEqualEqual() async {
+    await assertNoDiagnostics(r'''
+class C {
+  @override
+  bool operator ==(Object o) => false;
+}
+''');
+  }
+
+  test_extendsClassWithEqualEqual() async {
+    await assertNoDiagnostics(r'''
+class A {
+  @override
+  bool operator ==(Object o) => false;
+}
+
+class C extends A {}
+''');
+  }
+
+  test_implementsClass_indirectlyWithEqualEqual() async {
+    await assertDiagnostics(r'''
+class A {
+  @override
+  bool operator ==(Object o) => false;
+}
+
+class B extends A {}
+
+class C implements B {}
+''', [
+      lint(105, 1),
+    ]);
+  }
+
+  test_implementsClassWithEqualEqual() async {
+    await assertDiagnostics(r'''
+class A {
+  @override
+  bool operator ==(Object o) => false;
+}
+class C implements A {}
+''', [
+      lint(82, 1),
+    ]);
+  }
+
+  test_mixin() async {
+    await assertNoDiagnostics(r'''
+mixin M {
+  @override
+  bool operator ==(Object o) => false;
+}
+''');
+  }
+}
diff --git a/pkg/linter/test_data/rules/avoid_classes_with_only_static_members.dart b/pkg/linter/test_data/rules/avoid_classes_with_only_static_members.dart
deleted file mode 100644
index f97d64e..0000000
--- a/pkg/linter/test_data/rules/avoid_classes_with_only_static_members.dart
+++ /dev/null
@@ -1,55 +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.
-
-class Bad // LINT
-{
-  static int a = 0;
-
-  static foo() {}
-}
-
-class Ok extends Good1 // OK
-{
-  static int staticInt = 0;
-
-  static foo() {}
-}
-
-class Bad3 // OK
-{}
-
-class Good1 // OK
-{
-  int a = 0;
-}
-
-class Good2 // OK
-{
-  void foo() {}
-}
-
-class Good3 // OK
-{
-  Good3();
-}
-
-class Color // OK
-{
-  static const red = '#f00';
-  static const green = '#0f0';
-  static const blue = '#00f';
-  static const black = '#000';
-  static const white = '#fff';
-}
-
-class DateUtils // LINT
-{
-  static DateTime mostRecent(List<DateTime> dates) => dates.first;
-}
-
-class F // OK
-{
-  F._();
-  static int f = 0;
-}
diff --git a/pkg/linter/test_data/rules/avoid_implementing_value_types.dart b/pkg/linter/test_data/rules/avoid_implementing_value_types.dart
deleted file mode 100644
index fe4e1b8..0000000
--- a/pkg/linter/test_data/rules/avoid_implementing_value_types.dart
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-class Size { // OK
-  final int inBytes;
-  const Size(this.inBytes);
-
-  @override
-  bool operator ==(Object o) => o is Size && o.inBytes == inBytes;
-
-  @override
-  int get hashCode => inBytes.hashCode;
-}
-
-class SizeWithKilobytes extends Size { // OK
-  SizeWithKilobytes(int inBytes) : super(inBytes);
-
-  double get inKilobytes => inBytes / 1000;
-}
-
-class EmptyFileSize1 implements Size { // LINT
-  @override
-  int get inBytes => 0;
-}
-
-class EmptyFileSize2 implements SizeWithKilobytes { // LINT
-  @override
-  int get inBytes => 0;
-
-  @override
-  double get inKilobytes => 0.0;
-}
-
-mixin SizeClassMixin { // OK
-  int get inBytes => 0;
-
-  @override
-  bool operator ==(Object o) => o is Size && o.inBytes == o.inBytes;
-
-  @override
-  int get hashCode => inBytes.hashCode;
-}
-
-class UsesSizeClassMixin extends Object with SizeClassMixin {} // OK
diff --git a/tests/web/wasm/reject_import_export_pragmas_test.dart b/tests/web/wasm/reject_import_export_pragmas_test.dart
deleted file mode 100644
index edf4cf1..0000000
--- a/tests/web/wasm/reject_import_export_pragmas_test.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-// 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.
-
-// Test that importing `dart:ffi` and using `wasm:import` and export pragmas
-// are not allowed.
-
-import 'dart:ffi'; //# 01: compile-time error
-
-@pragma('wasm:export', 'f') //# 02: compile-time error
-void f() {}
-
-@pragma('wasm:import', 'g') //# 03: compile-time error
-external double g(double x);
-
-void main() {}
diff --git a/tools/VERSION b/tools/VERSION
index 432be5d..38347d9 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 3
 MINOR 5
 PATCH 0
-PRERELEASE 217
+PRERELEASE 218
 PRERELEASE_PATCH 0