diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index a34f4e3..03a17e0a 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
     "constraint, update this by running tools/generate_package_config.dart."
   ],
   "configVersion": 2,
-  "generated": "2020-10-20T09:30:11.069083",
+  "generated": "2020-10-20T23:33:25.579167",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
@@ -254,7 +254,8 @@
     {
       "name": "ffi",
       "rootUri": "../third_party/pkg/ffi",
-      "packageUri": "lib/"
+      "packageUri": "lib/",
+      "languageVersion": "2.10"
     },
     {
       "name": "fixnum",
@@ -521,6 +522,12 @@
       "languageVersion": "2.0"
     },
     {
+      "name": "scrape",
+      "rootUri": "../pkg/scrape",
+      "packageUri": "lib/",
+      "languageVersion": "2.10"
+    },
+    {
       "name": "sdk_library_metadata",
       "rootUri": "../sdk/lib/_internal/sdk_library_metadata",
       "packageUri": "lib/"
@@ -766,4 +773,4 @@
       "languageVersion": "2.4"
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/DEPS b/DEPS
index 9f75edb..8b6b6ce 100644
--- a/DEPS
+++ b/DEPS
@@ -98,7 +98,7 @@
 
   "chromedriver_tag": "83.0.4103.39",
   "dartdoc_rev" : "8f5f30e58bbc0f11f104888ee87f11cbd6b82cc7",
-  "ffi_rev": "454ab0f9ea6bd06942a983238d8a6818b1357edb",
+  "ffi_rev": "a90bd424116fb6f416337db67425171f2dc4c98f",
   "fixnum_rev": "16d3890c6dc82ca629659da1934e412292508bba",
   "glob_rev": "e9f4e6b7ae8abe5071461cf8f47191bb19cf7ef6",
   "html_rev": "22f17e97fedeacaa1e945cf84d8016284eed33a6",
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index 0d6be78..e24981c 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -64,6 +64,7 @@
 import 'package:analyzer/dart/analysis/analysis_context.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
@@ -123,7 +124,9 @@
     LintNames.empty_statements: [
       RemoveEmptyStatement.newInstance,
     ],
-    LintNames.hash_and_equals: [CreateMethod.equalsOrHashCode],
+    LintNames.hash_and_equals: [
+      CreateMethod.equalsOrHashCode,
+    ],
     LintNames.no_duplicate_case_values: [
       RemoveDuplicateCase.newInstance,
     ],
@@ -412,28 +415,35 @@
     }
 
     var errorCode = diagnostic.errorCode;
-    if (errorCode is LintCode) {
-      var generators = lintProducerMap[errorCode.name];
-      if (generators != null) {
-        for (var generator in generators) {
+    try {
+      if (errorCode is LintCode) {
+        var generators = lintProducerMap[errorCode.name];
+        if (generators != null) {
+          for (var generator in generators) {
+            await compute(generator());
+          }
+        }
+      } else {
+        var generator = nonLintProducerMap[errorCode];
+        if (generator != null) {
           await compute(generator());
         }
-      }
-    } else {
-      var generator = nonLintProducerMap[errorCode];
-      if (generator != null) {
-        await compute(generator());
-      }
-      var multiGenerators = nonLintMultiProducerMap[errorCode];
-      if (multiGenerators != null) {
-        for (var multiGenerator in multiGenerators) {
-          var multiProducer = multiGenerator();
-          multiProducer.configure(context);
-          for (var producer in multiProducer.producers) {
-            await compute(producer);
+        var multiGenerators = nonLintMultiProducerMap[errorCode];
+        if (multiGenerators != null) {
+          for (var multiGenerator in multiGenerators) {
+            var multiProducer = multiGenerator();
+            multiProducer.configure(context);
+            for (var producer in multiProducer.producers) {
+              await compute(producer);
+            }
           }
         }
       }
+    } catch (e, s) {
+      throw CaughtException.withMessage(
+          'Exception generating fix for ${errorCode.name} in ${result.path}',
+          e,
+          s);
     }
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
index 17509ff..dd39818 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
@@ -36,13 +36,18 @@
   }
 
   Future<void> createEqualsOrHashCode(ChangeBuilder builder) async {
-    final methodDecl = node.thisOrAncestorOfType<MethodDeclaration>();
-    final classDecl = methodDecl.thisOrAncestorOfType<ClassDeclaration>();
-    if (methodDecl != null && classDecl != null) {
+    final memberDecl = node.thisOrAncestorOfType<ClassMember>();
+    if (memberDecl == null) {
+      return;
+    }
+    final classDecl = memberDecl.thisOrAncestorOfType<ClassDeclaration>();
+    if (classDecl != null) {
       final classElement = classDecl.declaredElement;
 
+      var missingEquals = memberDecl is FieldDeclaration ||
+          (memberDecl as MethodDeclaration).name.name == 'hashCode';
       ExecutableElement element;
-      if (methodDecl.name.name == 'hashCode') {
+      if (missingEquals) {
         _memberName = '==';
         element = classElement.lookUpInheritedMethod(
             _memberName, classElement.library);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
index d207559..f93b1cc 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
@@ -47,6 +47,28 @@
 ''');
   }
 
+  /// See: https://github.com/dart-lang/sdk/issues/43867
+  Future<void> test_equals_fieldHashCode() async {
+    await resolveTestUnit('''
+class C {
+  @override
+  int hashCode = 13;
+}
+''');
+    await assertHasFix('''
+class C {
+  @override
+  int hashCode = 13;
+
+  @override
+  bool operator ==(Object other) {
+    // TODO: implement ==
+    return super == other;
+  }
+}
+''');
+  }
+
   Future<void> test_hashCode() async {
     await resolveTestUnit('''
 class C {
diff --git a/tools/VERSION b/tools/VERSION
index 807baa8..bd8a9fd 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 11
 PATCH 0
-PRERELEASE 240
+PRERELEASE 241
 PRERELEASE_PATCH 0
\ No newline at end of file
