Issue 44671. Don't report INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER for identifiers in hide combinators.
Bug: https://github.com/dart-lang/sdk/issues/44671
Change-Id: I810ab30f998c63c8b7a537c6fee7ea39c603be9d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/179420
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index 5030608..4085b7a 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -1731,6 +1731,10 @@
return;
}
+ if (parent is HideCombinator) {
+ return;
+ }
+
_checkForInvalidInternalAccess(identifier, element);
_checkForOtherInvalidAccess(identifier, element);
}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
index 998e775..2ef124c 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
@@ -25,18 +25,40 @@
writeTestPackageConfigWithMeta();
}
- test_export() async {
- newFile('$testPackageRootPath/lib1.dart', content: r'''
+ test_export_hide() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
import 'package:meta/meta.dart';
+
@visibleForTesting
-int fn0() => 1;
-''');
- newFile('$testPackageRootPath/lib2.dart', content: r'''
-export 'lib1.dart' show fn0;
+class A {}
+
+class B {}
''');
- await _resolveFile('$testPackageRootPath/lib1.dart');
- await _resolveFile('$testPackageRootPath/lib2.dart');
+ newFile('$testPackageLibPath/b.dart', content: r'''
+export 'a.dart' hide A;
+''');
+
+ await _resolveFile('$testPackageLibPath/a.dart');
+ await _resolveFile('$testPackageLibPath/b.dart');
+ }
+
+ test_export_show() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+import 'package:meta/meta.dart';
+
+@visibleForTesting
+class A {}
+
+class B {}
+''');
+
+ newFile('$testPackageLibPath/b.dart', content: r'''
+export 'a.dart' show A;
+''');
+
+ await _resolveFile('$testPackageLibPath/a.dart');
+ await _resolveFile('$testPackageLibPath/b.dart');
}
test_fromIntegrationTestDirectory() async {
@@ -176,6 +198,49 @@
]);
}
+ test_import_hide() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+import 'package:meta/meta.dart';
+
+@visibleForTesting
+class A {}
+
+class B {}
+''');
+
+ newFile('$testPackageLibPath/b.dart', content: r'''
+import 'a.dart' hide A;
+
+void f(B _) {}
+''');
+
+ await _resolveFile('$testPackageLibPath/a.dart');
+ await _resolveFile('$testPackageLibPath/b.dart');
+ }
+
+ test_import_show() async {
+ newFile('$testPackageLibPath/a.dart', content: r'''
+import 'package:meta/meta.dart';
+
+@visibleForTesting
+class A {}
+
+class B {}
+''');
+
+ newFile('$testPackageLibPath/b.dart', content: r'''
+import 'a.dart' show A;
+
+void f(A _) {}
+''');
+
+ await _resolveFile('$testPackageLibPath/a.dart');
+ await _resolveFile('$testPackageLibPath/b.dart', [
+ error(HintCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER, 21, 1),
+ error(HintCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER, 32, 1),
+ ]);
+ }
+
test_method() async {
newFile('$testPackageRootPath/lib1.dart', content: r'''
import 'package:meta/meta.dart';