Version 2.11.0-241.0.dev

Merge commit '2ad8fdeebb0de82c8384c0a1dd4ca2109e53f450' into 'dev'
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