diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index a9b52c3..4f359ad 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -40,16 +40,6 @@
     50,
     "Remove '{0}'",
   );
-  static const REPLACE_WITH_STRICT_CASTS = FixKind(
-    'analysisOptions.fix.replaceWithStrictCasts',
-    50,
-    'Replace with the strict-casts analysis mode',
-  );
-  static const REPLACE_WITH_STRICT_RAW_TYPES = FixKind(
-    'analysisOptions.fix.replaceWithStrictRawTypes',
-    50,
-    'Replace with the strict-raw-types analysis mode',
-  );
 }
 
 /// The implementation of [DartFixContext].
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart b/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
index 5e36f57..8c148db 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
@@ -16,12 +16,9 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/lint/options_rule_validator.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
-import 'package:analyzer_plugin/utilities/change_builder/change_builder_yaml.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
-import 'package:collection/collection.dart';
 import 'package:yaml/yaml.dart';
-import 'package:yaml_edit/yaml_edit.dart';
 
 /// The generator used to generate fixes in analysis options files.
 class AnalysisOptionsFixGenerator {
@@ -70,26 +67,7 @@
 //        AnalysisOptionsHintCode.STRONG_MODE_SETTING_DEPRECATED) {
 //    } else
 
-    if (errorCode ==
-        AnalysisOptionsWarningCode
-            .ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT) {
-      var analyzerMap = options['analyzer'];
-      if (analyzerMap is! YamlMap) {
-        return fixes;
-      }
-      var strongModeMap = analyzerMap['strong-mode'];
-
-      if (strongModeMap is! YamlMap) {
-        return fixes;
-      }
-      if (_isErrorAtMapKey(strongModeMap, 'implicit-casts')) {
-        await _addFix_replaceWithStrictCasts(
-            coveringNodePath, analyzerMap, strongModeMap);
-      } else if (_isErrorAtMapKey(strongModeMap, 'implicit-dynamic')) {
-        await _addFix_replaceWithStrictRawTypes(
-            coveringNodePath, analyzerMap, strongModeMap);
-      }
-    } else if (errorCode == DEPRECATED_LINT_HINT) {
+    if (errorCode == DEPRECATED_LINT_HINT) {
       await _addFix_removeLint(coveringNodePath);
     } else if (errorCode ==
         AnalysisOptionsHintCode.SUPER_MIXINS_SETTING_DEPRECATED) {
@@ -131,52 +109,6 @@
     }
   }
 
-  /// Replaces `analyzer: strong-mode: implicit-casts: false` with
-  /// `analyzer: language: strict-casts: true`.
-  Future<void> _addFix_replaceWithStrictCasts(List<YamlNode> coveringNodePath,
-      YamlMap analyzerMap, YamlMap strongModeMap) async {
-    var builder =
-        ChangeBuilder(workspace: _NonDartChangeWorkspace(resourceProvider));
-    await builder.addYamlFileEdit(file, (builder) {
-      _replaceStrongModeEntryWithLanguageEntry(
-        builder,
-        coveringNodePath,
-        analyzerMap,
-        strongModeMap,
-        strongModeKey: 'implicit-casts',
-        languageKey: 'strict-casts',
-        languageValue: true,
-      );
-    });
-    _addFixFromBuilder(
-        builder, AnalysisOptionsFixKind.REPLACE_WITH_STRICT_CASTS,
-        args: [coveringNodePath[0].toString()]);
-  }
-
-  /// Replaces `analyzer: strong-mode: implicit-dynamic: false` with
-  /// `analyzer: language: strict-raw-types: true`.
-  Future<void> _addFix_replaceWithStrictRawTypes(
-      List<YamlNode> coveringNodePath,
-      YamlMap analyzerMap,
-      YamlMap strongModeMap) async {
-    var builder =
-        ChangeBuilder(workspace: _NonDartChangeWorkspace(resourceProvider));
-    await builder.addYamlFileEdit(file, (builder) {
-      _replaceStrongModeEntryWithLanguageEntry(
-        builder,
-        coveringNodePath,
-        analyzerMap,
-        strongModeMap,
-        strongModeKey: 'implicit-dynamic',
-        languageKey: 'strict-raw-types',
-        languageValue: true,
-      );
-    });
-    _addFixFromBuilder(
-        builder, AnalysisOptionsFixKind.REPLACE_WITH_STRICT_RAW_TYPES,
-        args: [coveringNodePath[0].toString()]);
-  }
-
   /// Add a fix whose edits were built by the [builder] that has the given
   /// [kind]. If [args] are provided, they will be used to fill in the message
   /// for the fix.
@@ -259,20 +191,6 @@
     return offset;
   }
 
-  /// Returns whether the error is located within [map], covering the
-  /// [YamlScalar] node for [key].
-  bool _isErrorAtMapKey(YamlMap map, String key) {
-    var keyNode = map.nodes.keys
-        .whereType<YamlScalar>()
-        .firstWhereOrNull((k) => k.value == key);
-    if (keyNode == null) {
-      return false;
-    }
-    var keyOffset = keyNode.span.start.offset;
-    var keyLength = keyNode.span.end.offset - keyOffset;
-    return keyOffset == errorOffset && keyLength == errorLength;
-  }
-
   SourceRange _lines(int start, int end) {
     var startLocation = lineInfo.getLocation(start);
     var startOffset = lineInfo.getOffsetOfLine(startLocation.lineNumber - 1);
@@ -281,53 +199,6 @@
         math.min(endLocation.lineNumber, lineInfo.lineCount - 1));
     return SourceRange(startOffset, endOffset - startOffset);
   }
-
-  /// Replaces a 'strong-mode' entry keyed to [strongModeKey] with a 'language'
-  /// entry with [languageKey] and [languageValue].
-  ///
-  /// 'strong-mode' and 'language' are each maps which can be found under the
-  /// top-level 'analyzer' map. 'strong-mode' (given as [strongModeMap]) must
-  /// already be present under the 'analyzer' map (given as [analyzerMap]).
-  void _replaceStrongModeEntryWithLanguageEntry(
-    YamlFileEditBuilder builder,
-    List<YamlNode> coveringNodePath,
-    YamlMap analyzerMap,
-    YamlMap strongModeMap, {
-    required String strongModeKey,
-    required String languageKey,
-    required Object? languageValue,
-  }) {
-    var yamlEditor = YamlEditor(content);
-    // If 'language' does not exist yet under 'analyzer', create it.
-    if (analyzerMap['language'] == null) {
-      yamlEditor.update(['analyzer', 'language'], {languageKey: languageValue});
-    } else {
-      yamlEditor.update(['analyzer', 'language', languageKey], languageValue);
-    }
-    var languageEdit = yamlEditor.edits.single;
-    builder.addSimpleReplacement(
-        SourceRange(languageEdit.offset, languageEdit.length),
-        languageEdit.replacement);
-
-    // If `strongModeKey` is the only entry under 'strong-mode', then remove
-    // the entire 'strong-mode' entry.
-    if (strongModeMap.length == 1) {
-      yamlEditor.remove(['analyzer', 'strong-mode']);
-    } else {
-      yamlEditor.remove(['analyzer', 'strong-mode', strongModeKey]);
-    }
-    var strongModeEdit = yamlEditor.edits[1];
-    int strongModeEditOffset;
-    if (strongModeEdit.offset > languageEdit.offset) {
-      strongModeEditOffset = strongModeEdit.offset -
-          (languageEdit.replacement.length - languageEdit.length);
-    } else {
-      strongModeEditOffset = strongModeEdit.offset;
-    }
-    builder.addSimpleReplacement(
-        SourceRange(strongModeEditOffset, strongModeEdit.length),
-        strongModeEdit.replacement);
-  }
 }
 
 class _NonDartChangeWorkspace implements ChangeWorkspace {
diff --git a/pkg/analysis_server/pubspec.yaml b/pkg/analysis_server/pubspec.yaml
index 98487cb..5f62d61 100644
--- a/pkg/analysis_server/pubspec.yaml
+++ b/pkg/analysis_server/pubspec.yaml
@@ -29,7 +29,6 @@
   path: any
   watcher: any
   yaml: any
-  yaml_edit: any
 
 dev_dependencies:
   analyzer_utilities:
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 3d99a77..ab5be7e 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -66,10 +66,6 @@
 
   Future<AnalysisSession> get session => sessionFor(testPackageRootPath);
 
-  /// The path for `analysis_options.yaml` in [testPackageRootPath].
-  String get testAnalysisOptionsPath =>
-      convertPath('$testPackageRootPath/analysis_options.yaml');
-
   String? get testPackageLanguageVersion => latestLanguageVersion;
 
   String get testPackageLibPath => '$testPackageRootPath/lib';
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index f4d93622..816c714 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -43,6 +43,8 @@
 /// TODO(scheglov) this is duplicate
 class AnalysisOptionsFileConfig {
   final List<String> experiments;
+  final bool implicitCasts;
+  final bool implicitDynamic;
   final List<String> lints;
   final bool strictCasts;
   final bool strictInference;
@@ -50,6 +52,8 @@
 
   AnalysisOptionsFileConfig({
     this.experiments = const [],
+    this.implicitCasts = true,
+    this.implicitDynamic = true,
     this.lints = const [],
     this.strictCasts = false,
     this.strictInference = false,
@@ -68,6 +72,9 @@
     buffer.writeln('    strict-casts: $strictCasts');
     buffer.writeln('    strict-inference: $strictInference');
     buffer.writeln('    strict-raw-types: $strictRawTypes');
+    buffer.writeln('  strong-mode:');
+    buffer.writeln('    implicit-casts: $implicitCasts');
+    buffer.writeln('    implicit-dynamic: $implicitDynamic');
 
     buffer.writeln('linter:');
     buffer.writeln('  rules:');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_casts_test.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_casts_test.dart
deleted file mode 100644
index c8be60d..0000000
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_casts_test.dart
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright (c) 2022, 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 'test_support.dart';
-
-void main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(ReplaceWithStrictCastsTest);
-  });
-}
-
-@reflectiveTest
-class ReplaceWithStrictCastsTest extends AnalysisOptionsFixTest {
-  Future<void> test_hasLanguage() async {
-    await assertHasFix('''
-analyzer:
-  language:
-    strict-inference: true
-  strong-mode:
-    implicit-casts: false
-''', '''
-analyzer:
-  language:
-    strict-casts: true
-    strict-inference: true
-''');
-  }
-
-  Future<void> test_hasLanguage_isAfter() async {
-    await assertHasFix('''
-analyzer:
-  strong-mode:
-    implicit-casts: false
-  language:
-    strict-inference: true
-''', '''
-analyzer:
-  language:
-    strict-casts: true
-    strict-inference: true
-''');
-  }
-
-  Future<void> test_hasStrictCastsFalse() async {
-    await assertHasFix('''
-analyzer:
-  language:
-    strict-casts: false
-  strong-mode:
-    implicit-casts: false
-''', '''
-analyzer:
-  language:
-    strict-casts: true
-''');
-  }
-
-  Future<void> test_hasStrictCastsTrue() async {
-    await assertHasFix('''
-analyzer:
-  language:
-    strict-casts: true
-  strong-mode:
-    implicit-casts: false
-''', '''
-analyzer:
-  language:
-    strict-casts: true
-''');
-  }
-
-  Future<void> test_noLanguage() async {
-    await assertHasFix('''
-analyzer:
-  strong-mode:
-    implicit-casts: false
-''', '''
-analyzer:
-  language:
-    strict-casts: true
-''');
-  }
-
-  Future<void> test_noLanguage_analyzerHasOtherEntries() async {
-    await assertHasFix('''
-analyzer:
-  errors:
-    unused_import: ignore
-  strong-mode:
-    implicit-casts: false
-''', '''
-analyzer:
-  errors:
-    unused_import: ignore
-  language:
-    strict-casts: true
-''');
-  }
-
-  Future<void> test_noLanguage_analyzerHasOtherEntriesAfter() async {
-    await assertHasFix('''
-analyzer:
-  strong-mode:
-    implicit-casts: false
-  errors:
-    unused_import: ignore
-''', '''
-analyzer:
-  errors:
-    unused_import: ignore
-  language:
-    strict-casts: true
-''');
-  }
-
-  Future<void> test_noLanguage_hasOtherStrongModeEntry() async {
-    await assertHasFix('''
-analyzer:
-  strong-mode:
-    implicit-casts: false
-    implicit-dynamic: false
-''', '''
-analyzer:
-  language:
-    strict-casts: true
-  strong-mode:
-    implicit-dynamic: false
-''', errorFilter: (error) => error.message.contains('implicit-casts'));
-  }
-
-  Future<void> test_noLanguage_implicitCastsHasComment() async {
-    await assertHasFix('''
-analyzer:
-  strong-mode:
-    # No implicit casts
-    implicit-casts: false
-''', '''
-analyzer:
-  language:
-    strict-casts: true
-''');
-  }
-
-  Future<void> test_noLanguage_strongModeHasComment() async {
-    // TODO(srawlins): This is unfortunate; it would be better to remove the
-    // comment. But we leave this assertion as is to show at least the file is
-    // not corrupted.
-    await assertHasFix('''
-analyzer:
-  # Strong mode
-  strong-mode:
-    implicit-casts: false
-''', '''
-analyzer:
-  # Strong mode
-  language:
-    strict-casts: true
-''');
-  }
-}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_raw_types_test.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_raw_types_test.dart
deleted file mode 100644
index eb8012d..0000000
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_raw_types_test.dart
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright (c) 2022, 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 'test_support.dart';
-
-void main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(ReplaceWithStrictRawTypesTest);
-  });
-}
-
-@reflectiveTest
-class ReplaceWithStrictRawTypesTest extends AnalysisOptionsFixTest {
-  Future<void> test_hasLanguage() async {
-    await assertHasFix('''
-analyzer:
-  language:
-    strict-inference: true
-  strong-mode:
-    implicit-dynamic: false
-''', '''
-analyzer:
-  language:
-    strict-inference: true
-    strict-raw-types: true
-''');
-  }
-
-  Future<void> test_hasLanguage_isAfter() async {
-    await assertHasFix('''
-analyzer:
-  strong-mode:
-    implicit-dynamic: false
-  language:
-    strict-inference: true
-''', '''
-analyzer:
-  language:
-    strict-inference: true
-    strict-raw-types: true
-''');
-  }
-
-  Future<void> test_hasStrictRawTypesFalse() async {
-    await assertHasFix('''
-analyzer:
-  language:
-    strict-raw-types: false
-  strong-mode:
-    implicit-dynamic: false
-''', '''
-analyzer:
-  language:
-    strict-raw-types: true
-''');
-  }
-
-  Future<void> test_hasStrictRawTypesTrue() async {
-    await assertHasFix('''
-analyzer:
-  language:
-    strict-raw-types: true
-  strong-mode:
-    implicit-dynamic: false
-''', '''
-analyzer:
-  language:
-    strict-raw-types: true
-''');
-  }
-
-  Future<void> test_noLanguage() async {
-    await assertHasFix('''
-analyzer:
-  strong-mode:
-    implicit-dynamic: false
-''', '''
-analyzer:
-  language:
-    strict-raw-types: true
-''');
-  }
-
-  Future<void> test_noLanguage_analyzerHasOtherEntries() async {
-    await assertHasFix('''
-analyzer:
-  errors:
-    unused_import: ignore
-  strong-mode:
-    implicit-dynamic: false
-''', '''
-analyzer:
-  errors:
-    unused_import: ignore
-  language:
-    strict-raw-types: true
-''');
-  }
-
-  Future<void> test_noLanguage_analyzerHasOtherEntriesAfter() async {
-    await assertHasFix('''
-analyzer:
-  strong-mode:
-    implicit-dynamic: false
-  errors:
-    unused_import: ignore
-''', '''
-analyzer:
-  errors:
-    unused_import: ignore
-  language:
-    strict-raw-types: true
-''');
-  }
-
-  Future<void> test_noLanguage_hasOtherStrongModeEntry() async {
-    await assertHasFix('''
-analyzer:
-  strong-mode:
-    implicit-casts: false
-    implicit-dynamic: false
-''', '''
-analyzer:
-  language:
-    strict-raw-types: true
-  strong-mode:
-    implicit-casts: false
-''', errorFilter: (error) => error.message.contains('implicit-dynamic'));
-  }
-
-  Future<void> test_noLanguage_implicitDynamicHasComment() async {
-    await assertHasFix('''
-analyzer:
-  strong-mode:
-    # No implicit dynamic
-    implicit-dynamic: false
-''', '''
-analyzer:
-  language:
-    strict-raw-types: true
-''');
-  }
-
-  Future<void> test_noLanguage_strongModeHasComment() async {
-    // TODO(srawlins): This is unfortunate; it would be better to remove the
-    // comment. But we leave this assertion as is to show at least the file is
-    // not corrupted.
-    await assertHasFix('''
-analyzer:
-  # Strong mode
-  strong-mode:
-    implicit-dynamic: false
-''', '''
-analyzer:
-  # Strong mode
-  language:
-    strict-raw-types: true
-''');
-  }
-}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart
index c4d940e..6d61c19 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart
@@ -6,15 +6,10 @@
 
 import 'remove_lint_test.dart' as remove_lint;
 import 'remove_setting_test.dart' as remove_setting;
-import 'replace_with_strict_casts_test.dart' as replace_with_strict_casts;
-import 'replace_with_strict_raw_types_test.dart'
-    as replace_with_strict_raw_types;
 
 void main() {
   defineReflectiveSuite(() {
     remove_lint.main();
     remove_setting.main();
-    replace_with_strict_casts.main();
-    replace_with_strict_raw_types.main();
   });
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
index d5cc2c4..058fc31 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
@@ -3,13 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/plugin/edit/fix/fix_core.dart';
+import 'package:analysis_server/src/protocol_server.dart' show SourceEdit;
 import 'package:analysis_server/src/services/correction/fix/analysis_options/fix_generator.dart';
-import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/task/options.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart'
-    hide AnalysisError;
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:yaml/yaml.dart';
 
@@ -17,11 +16,8 @@
 /// errors in Dart files.
 class AnalysisOptionsFixTest with ResourceProviderMixin {
   Future<void> assertHasFix(
-    String initialContent,
-    String expectedContent, {
-    bool Function(AnalysisError)? errorFilter,
-  }) async {
-    var fixes = await _getFixes(initialContent, errorFilter: errorFilter);
+      String initialContent, String expectedContent) async {
+    var fixes = await _getFixes(initialContent);
     expect(fixes, hasLength(1));
     var fileEdits = fixes[0].change.edits;
     expect(fileEdits, hasLength(1));
@@ -36,11 +32,8 @@
     expect(fixes, hasLength(0));
   }
 
-  Future<List<Fix>> _getFixes(
-    String content, {
-    bool Function(AnalysisError)? errorFilter,
-  }) {
-    var optionsFile = newFile2('/analysis_options.yaml', content);
+  Future<List<Fix>> _getFixes(String content) {
+    var optionsFile = getFile('/analysis_options.yaml');
     var sourceFactory = SourceFactory([]);
     var errors = analyzeAnalysisOptions(
       optionsFile.createSource(),
@@ -48,12 +41,6 @@
       sourceFactory,
       '/',
     );
-    if (errorFilter != null) {
-      if (errors.length == 1) {
-        fail('Unnecessary error filter');
-      }
-      errors = errors.where(errorFilter).toList();
-    }
     expect(errors, hasLength(1));
     var error = errors[0];
     var options = _parseYaml(content);
diff --git a/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart b/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
index 962d243..cbe95e2 100644
--- a/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
+++ b/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
@@ -135,17 +135,6 @@
   );
 
   /**
-   * An error code indicating that the given option is deprecated.
-   */
-  static const AnalysisOptionsWarningCode
-      ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT = AnalysisOptionsWarningCode(
-    'ANALYSIS_OPTION_DEPRECATED',
-    "The option '{0}' is no longer supported.",
-    correctionMessage: "Try using the new '{1}' option.",
-    uniqueName: 'ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT',
-  );
-
-  /**
    * An error code indicating a specified include file has a warning.
    *
    * Parameters:
diff --git a/pkg/analyzer/lib/src/task/options.dart b/pkg/analyzer/lib/src/task/options.dart
index 3c67e40..ea2f3f4 100644
--- a/pkg/analyzer/lib/src/task/options.dart
+++ b/pkg/analyzer/lib/src/task/options.dart
@@ -635,48 +635,43 @@
   void validate(ErrorReporter reporter, YamlMap options) {
     var analyzer = options.valueAt(AnalyzerOptions.analyzer);
     if (analyzer is YamlMap) {
-      var strongModeNode = analyzer.valueAt(AnalyzerOptions.strong_mode);
-      if (strongModeNode is YamlScalar) {
-        return _validateStrongModeAsScalar(reporter, strongModeNode);
-      } else if (strongModeNode is YamlMap) {
-        return _validateStrongModeAsMap(reporter, strongModeNode);
-      } else if (strongModeNode != null) {
-        reporter.reportErrorForSpan(
-            AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT,
-            strongModeNode.span,
-            [AnalyzerOptions.enableExperiment]);
-      }
-    }
-  }
-
-  void _validateStrongModeAsMap(
-      ErrorReporter reporter, YamlMap strongModeNode) {
-    strongModeNode.nodes.forEach((k, v) {
-      if (k is YamlScalar) {
-        var key = k.value?.toString();
-        if (!AnalyzerOptions.strongModeOptions.contains(key)) {
-          _builder.reportError(reporter, AnalyzerOptions.strong_mode, k);
-        } else if (key == AnalyzerOptions.declarationCasts) {
+      var v = analyzer.valueAt(AnalyzerOptions.strong_mode);
+      if (v is YamlScalar) {
+        var value = toLowerCase(v.value);
+        if (!AnalyzerOptions.trueOrFalse.contains(value)) {
           reporter.reportErrorForSpan(
-              AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED,
-              k.span,
-              [AnalyzerOptions.declarationCasts]);
-        } else if (key == AnalyzerOptions.implicitCasts) {
+              AnalysisOptionsWarningCode.UNSUPPORTED_VALUE, v.span, [
+            AnalyzerOptions.strong_mode,
+            v.value,
+            AnalyzerOptions.trueOrFalseProposal
+          ]);
+        } else if (value == 'false') {
           reporter.reportErrorForSpan(
-              AnalysisOptionsWarningCode
-                  .ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT,
-              k.span,
-              [AnalyzerOptions.implicitCasts, 'strict-casts']);
-        } else if (key == AnalyzerOptions.implicitDynamic) {
+              AnalysisOptionsWarningCode.SPEC_MODE_REMOVED, v.span);
+        } else if (value == 'true') {
           reporter.reportErrorForSpan(
-              AnalysisOptionsWarningCode
-                  .ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT,
-              k.span,
-              [AnalyzerOptions.implicitDynamic, 'strict-raw-types']);
-        } else {
-          // The key is valid.
-          if (v is YamlScalar) {
-            var value = toLowerCase(v.value);
+              AnalysisOptionsHintCode.STRONG_MODE_SETTING_DEPRECATED, v.span);
+        }
+      } else if (v is YamlMap) {
+        v.nodes.forEach((k, v) {
+          String? key, value;
+          bool validKey = false;
+          if (k is YamlScalar) {
+            key = k.value?.toString();
+            if (!AnalyzerOptions.strongModeOptions.contains(key)) {
+              _builder.reportError(reporter, AnalyzerOptions.strong_mode, k);
+            } else if (key == AnalyzerOptions.declarationCasts) {
+              reporter.reportErrorForSpan(
+                  AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED,
+                  k.span,
+                  [AnalyzerOptions.declarationCasts]);
+            } else {
+              // If we have a valid key, go on and check the value.
+              validKey = true;
+            }
+          }
+          if (validKey && v is YamlScalar) {
+            value = toLowerCase(v.value);
             if (!AnalyzerOptions.trueOrFalse.contains(value)) {
               reporter.reportErrorForSpan(
                   AnalysisOptionsWarningCode.UNSUPPORTED_VALUE,
@@ -684,28 +679,13 @@
                   [key!, v.value, AnalyzerOptions.trueOrFalseProposal]);
             }
           }
-        }
+        });
+      } else if (v != null) {
+        reporter.reportErrorForSpan(
+            AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT,
+            v.span,
+            [AnalyzerOptions.enableExperiment]);
       }
-    });
-  }
-
-  void _validateStrongModeAsScalar(
-      ErrorReporter reporter, YamlScalar strongModeNode) {
-    var stringValue = toLowerCase(strongModeNode.value);
-    if (!AnalyzerOptions.trueOrFalse.contains(stringValue)) {
-      reporter.reportErrorForSpan(
-          AnalysisOptionsWarningCode.UNSUPPORTED_VALUE, strongModeNode.span, [
-        AnalyzerOptions.strong_mode,
-        strongModeNode.value,
-        AnalyzerOptions.trueOrFalseProposal
-      ]);
-    } else if (stringValue == 'false') {
-      reporter.reportErrorForSpan(
-          AnalysisOptionsWarningCode.SPEC_MODE_REMOVED, strongModeNode.span);
-    } else if (stringValue == 'true') {
-      reporter.reportErrorForSpan(
-          AnalysisOptionsHintCode.STRONG_MODE_SETTING_DEPRECATED,
-          strongModeNode.span);
     }
   }
 }
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index 0b689ee..372e4e8 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -74,11 +74,6 @@
   ANALYSIS_OPTION_DEPRECATED:
     problemMessage: "The option '{0}' is no longer supported."
     comment: An error code indicating that the given option is deprecated.
-  ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT:
-    sharedName: ANALYSIS_OPTION_DEPRECATED
-    problemMessage: "The option '{0}' is no longer supported."
-    correctionMessage: "Try using the new '{1}' option."
-    comment: An error code indicating that the given option is deprecated.
   INCLUDED_FILE_WARNING:
     problemMessage: "Warning in the included options file {0}({1}..{2}): {3}"
     comment: |-
diff --git a/pkg/analyzer/test/src/task/options_test.dart b/pkg/analyzer/test/src/task/options_test.dart
index 0afa6ef..bf13737 100644
--- a/pkg/analyzer/test/src/task/options_test.dart
+++ b/pkg/analyzer/test/src/task/options_test.dart
@@ -460,22 +460,6 @@
 ''', [AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED]);
   }
 
-  test_analyzer_strong_mode_deprecated_key_implicit_casts() {
-    validate('''
-analyzer:
-  strong-mode:
-    implicit-casts: false
-''', [AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT]);
-  }
-
-  test_analyzer_strong_mode_deprecated_key_implicit_dynamic() {
-    validate('''
-analyzer:
-  strong-mode:
-    implicit-dynamic: false
-''', [AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT]);
-  }
-
   test_analyzer_strong_mode_error_code_supported() {
     validate('''
 analyzer:
@@ -507,6 +491,14 @@
 ''', [AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUES]);
   }
 
+  test_analyzer_strong_mode_unsupported_value() {
+    validate('''
+analyzer:
+  strong-mode:
+    implicit-dynamic: foo
+''', [AnalysisOptionsWarningCode.UNSUPPORTED_VALUE]);
+  }
+
   test_analyzer_supported_exclude() {
     validate('''
 analyzer:
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
index 5ea1a4a..dca43e9 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
@@ -181,7 +181,11 @@
           this,
           path,
           loadYamlDocument(
-              workspace.resourceProvider.getFile(path).readAsStringSync(),
+              workspace
+                  .getSession(path)!
+                  .resourceProvider
+                  .getFile(path)
+                  .readAsStringSync(),
               recover: true),
           0);
       _yamlFileEditBuilders[path] = builder;
diff --git a/tools/VERSION b/tools/VERSION
index f24b7e4..02e0b9d 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 245
+PRERELEASE 246
 PRERELEASE_PATCH 0
\ No newline at end of file
