Reinstate HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE

This reverts parts of https://dart-review.googlesource.com/c/sdk/+/289444

The code needs to be reinstated as flutter has tests which
verify that certain data-driven fixes work, which happen to
be uses of deprecated members, from the same package. See
this failure for example:
https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket/8785707696655090305/+/u/analyze_flutter_flutter/stdout?format=raw

The linter bump is kept the same, and some code which was
unnecessarily coupled tightly with
DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE is kept the same.

The big test refactor which was included in 289444 is also
kept the same, only a few tests are added to verify
HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE gets reported.

Bug: https://github.com/dart-lang/sdk/issues/51678
Change-Id: I6852376b299d8375c720ea56dc6a6a6119de3364
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/291054
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index 2135f67..20b55ad 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -34,6 +34,12 @@
 
 final diagnosticTagsForErrorCode = <String, List<lsp.DiagnosticTag>>{
   _errorCode(WarningCode.DEAD_CODE): [lsp.DiagnosticTag.Unnecessary],
+  _errorCode(HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE): [
+    lsp.DiagnosticTag.Deprecated
+  ],
+  _errorCode(HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE_WITH_MESSAGE): [
+    lsp.DiagnosticTag.Deprecated
+  ],
   _errorCode(HintCode.DEPRECATED_MEMBER_USE): [lsp.DiagnosticTag.Deprecated],
   'deprecated_member_use_from_same_package': [lsp.DiagnosticTag.Deprecated],
   'deprecated_member_use_from_same_package_with_message': [
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 47e07ed..0ea868b 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
@@ -132,6 +132,12 @@
     HintCode.DEPRECATED_MEMBER_USE: [
       DataDriven.new,
     ],
+    HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE: [
+      DataDriven.new,
+    ],
+    HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE_WITH_MESSAGE: [
+      DataDriven.new,
+    ],
     HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE: [
       DataDriven.new,
     ],
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 13335b7..17e5818 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -366,6 +366,9 @@
     LintNames.deprecated_member_use_from_same_package: [
       DataDriven.new,
     ],
+    LintNames.deprecated_member_use_from_same_package_with_message: [
+      DataDriven.new,
+    ],
   };
 
   /// A map from the names of lint rules to a list of the generators that are
diff --git a/pkg/analysis_server/lib/src/services/linter/lint_names.dart b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
index 1743c25..9943b67 100644
--- a/pkg/analysis_server/lib/src/services/linter/lint_names.dart
+++ b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
@@ -59,6 +59,8 @@
       'dangling_library_doc_comments';
   static const String deprecated_member_use_from_same_package =
       'deprecated_member_use_from_same_package';
+  static const String deprecated_member_use_from_same_package_with_message =
+      'deprecated_member_use_from_same_package_with_message';
   static const String diagnostic_describe_all_properties =
       'diagnostic_describe_all_properties';
   static const String directives_ordering = 'directives_ordering';
diff --git a/pkg/analysis_server/test/integration/linter/lint_names_test.dart b/pkg/analysis_server/test/integration/linter/lint_names_test.dart
index ed2c416..e05b138 100644
--- a/pkg/analysis_server/test/integration/linter/lint_names_test.dart
+++ b/pkg/analysis_server/test/integration/linter/lint_names_test.dart
@@ -6,7 +6,6 @@
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
-import 'package:analyzer/src/lint/linter.dart';
 import 'package:analyzer/src/lint/registry.dart';
 import 'package:analyzer_utilities/package_root.dart';
 import 'package:linter/src/rules.dart';
@@ -14,6 +13,20 @@
 import 'package:test/test.dart';
 
 void main() {
+  late List<String> registeredLintNames;
+
+  setUp(() {
+    if (Registry.ruleRegistry.isEmpty) {
+      registerLintRules();
+    }
+
+    registeredLintNames = [
+      for (var rule in Registry.ruleRegistry)
+        ...rule.lintCodes
+            .map((e) => e.uniqueName.replaceFirst('LintCode.', '')),
+    ];
+  });
+
   /// Ensure server lint name representations correspond w/ actual lint rules.
   /// See, e.g., https://dart-review.googlesource.com/c/sdk/+/95743.
   test('lint_names', () async {
@@ -43,22 +56,6 @@
   });
 }
 
-List<LintRule>? _registeredLints;
-
-Iterable<String> get registeredLintNames => registeredLints.map((r) => r.name);
-
-List<LintRule> get registeredLints {
-  var registeredLints = _registeredLints;
-  if (registeredLints == null) {
-    if (Registry.ruleRegistry.isEmpty) {
-      registerLintRules();
-    }
-    registeredLints = Registry.ruleRegistry.toList();
-    _registeredLints = registeredLints;
-  }
-  return registeredLints;
-}
-
 class _FixCollector extends GeneralizingAstVisitor<void> {
   final List<String> lintNames = <String>[];
 
diff --git a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
index cf5590e..8fff94e 100644
--- a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
+++ b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
@@ -306,14 +306,13 @@
   void reportError(
       AstNode errorNode, Element element, String displayName, String? message) {
     var library = element is LibraryElement ? element : element.library;
-    if (_isLibraryInWorkspacePackage(library)) {
-      return;
-    }
 
     message = message?.trim();
     if (message == null || message.isEmpty || message == '.') {
       _errorReporter.reportErrorForNode(
-        HintCode.DEPRECATED_MEMBER_USE,
+        _isLibraryInWorkspacePackage(library)
+            ? HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE
+            : HintCode.DEPRECATED_MEMBER_USE,
         errorNode,
         [displayName],
       );
@@ -324,7 +323,9 @@
         message = '$message.';
       }
       _errorReporter.reportErrorForNode(
-        HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE,
+        _isLibraryInWorkspacePackage(library)
+            ? HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE_WITH_MESSAGE
+            : HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE,
         errorNode,
         [displayName, message],
       );
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
index 60415ce..437ba30 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
@@ -341,6 +341,19 @@
     ]);
   }
 
+  test_export_fromSamePackage() async {
+    newFile('$testPackageLibPath/lib2.dart', r'''
+@deprecated
+library a;
+''');
+
+    await assertErrorsInCode('''
+export 'lib2.dart';
+''', [
+      error(HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE, 0, 19),
+    ]);
+  }
+
   test_extensionOverride() async {
     await assertErrorsInCode2(
       externalCode: r'''
@@ -786,6 +799,25 @@
     );
   }
 
+  test_methodInvocation_fromSamePackage() async {
+    newFile('$testPackageLibPath/lib2.dart', r'''
+class A {
+  @deprecated
+  void foo() {}
+}
+''');
+
+    await assertErrorsInCode(r'''
+import 'lib2.dart';
+
+void f(A a) {
+  a.foo();
+}
+''', [
+      error(HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE, 39, 3),
+    ]);
+  }
+
   test_methodInvocation_inDeprecatedConstructor() async {
     await assertNoErrorsInCode(r'''
 class A {
@@ -1195,12 +1227,14 @@
   }
 
   test_redirectingConstructorInvocation_namedParameter() async {
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   A({@deprecated int a = 0}) {}
   A.named() : this(a: 0);
 }
-''');
+''', [
+      error(HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE, 61, 1),
+    ]);
   }
 
   test_setterInvocation() async {
diff --git a/pkg/analyzer/test/verify_diagnostics_test.dart b/pkg/analyzer/test/verify_diagnostics_test.dart
index bb710e6..3be5507 100644
--- a/pkg/analyzer/test/verify_diagnostics_test.dart
+++ b/pkg/analyzer/test/verify_diagnostics_test.dart
@@ -99,8 +99,6 @@
     'HintCode.DEPRECATED_COLON_FOR_DEFAULT_VALUE',
     // The code has been replaced but is not yet removed.
     'HintCode.DEPRECATED_MEMBER_USE',
-    // This is deprecated.
-    'HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE',
     // Produces two diagnostics when it should only produce one (see
     // https://github.com/dart-lang/sdk/issues/43051)
     'HintCode.UNNECESSARY_NULL_COMPARISON_FALSE',