diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 586a217..c2e4e39 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -4,7 +4,6 @@
 
 import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
-import 'package:analysis_server/src/services/correction/assist.dart';
 import 'package:analysis_server/src/services/correction/base_processor.dart';
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analysis_server/src/services/correction/dart/add_diagnostic_property_reference.dart';
@@ -171,46 +170,6 @@
     return assists;
   }
 
-  Future<List<Assist>> computeAssist(AssistKind assistKind) async {
-    var context = CorrectionProducerContext.create(
-      selectionOffset: selectionOffset,
-      selectionLength: selectionLength,
-      resolvedResult: resolvedResult,
-      workspace: workspace,
-    );
-    if (context == null) {
-      return assists;
-    }
-
-    Future<void> compute(CorrectionProducer producer) async {
-      producer.configure(context);
-
-      var builder = ChangeBuilder(
-          workspace: context.workspace, eol: context.utils.endOfLine);
-      await producer.compute(builder);
-
-      var assistKind = producer.assistKind;
-      if (assistKind != null) {
-        _addAssistFromBuilder(builder, assistKind,
-            args: producer.assistArguments);
-      }
-    }
-
-    // Calculate only specific assists for edit.dartFix
-    if (assistKind == DartAssistKind.CONVERT_CLASS_TO_MIXIN) {
-      await compute(ConvertClassToMixin());
-    } else if (assistKind == DartAssistKind.CONVERT_TO_INT_LITERAL) {
-      await compute(ConvertToIntLiteral());
-    } else if (assistKind == DartAssistKind.CONVERT_TO_SPREAD) {
-      await compute(ConvertAddAllToSpread());
-    } else if (assistKind == DartAssistKind.CONVERT_TO_FOR_ELEMENT) {
-      await compute(ConvertMapFromIterableToForLiteral());
-    } else if (assistKind == DartAssistKind.CONVERT_TO_IF_ELEMENT) {
-      await compute(ConvertConditionalExpressionToIfElement());
-    }
-    return assists;
-  }
-
   void _addAssistFromBuilder(ChangeBuilder builder, AssistKind kind,
       {List<Object>? args}) {
     var change = builder.sourceChange;
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 67f769b..26bcfbd 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -229,15 +229,15 @@
       dartFixContext: context,
       diagnostic: error,
       resolvedResult: resolveResult,
-      selectionOffset: context.error.offset,
-      selectionLength: context.error.length,
+      selectionOffset: error.offset,
+      selectionLength: error.length,
       workspace: workspace,
     );
     if (correctionContext == null) {
       return const <Fix>[];
     }
 
-    var generators = _getGenerators(error.errorCode, correctionContext);
+    var generators = _getGenerators(error.errorCode);
 
     var fixes = <Fix>[];
     for (var generator in generators) {
@@ -309,8 +309,7 @@
     }
   }
 
-  List<ProducerGenerator> _getGenerators(
-      ErrorCode errorCode, CorrectionProducerContext context) {
+  List<ProducerGenerator> _getGenerators(ErrorCode errorCode) {
     if (errorCode is LintCode) {
       return FixProcessor.lintProducerMap[errorCode.name] ?? [];
     } else {
